enum List { Cons(u32, Box), Nil, } impl List { fn new() -> List { List::Nil } fn prepend(self, element: u32) -> List { List::Cons(element, Box::new(self)) } fn len(&self) -> u32 { match *self { List::Nil => 0_u32, List::Cons(_, ref next) => 1 + next.len(), } } fn stringify(&self) -> String { match *self { List::Nil => format!("Nil"), List::Cons(this, ref next) => format!("{} -> {}", this, next.stringify()), } } } fn main() { let mut list = List::new(); list = list.prepend(1); list = list.prepend(2); list = list.prepend(3); println!("Len: {}", list.len()); println!("Str: {}", list.stringify()); }