Recursion makes quick

Reasoning, but be careful

Dragon eats its tail

struct Cons<T> {
car: T,
cdr: Option<Box<Cons<T>>>,
}
impl<T> Cons<T> {
fn append(mut self, v: T) -> Self {
match self.cdr {
Some(l) => l.append(v),
None => {
self.cdr = Some(Box::new(Cons{car: v, cdr: None}));
self
},
}
}
}
fn main() {
let mut l = Cons { car: 0, cdr: None };
l = l.append(1);
}