#[deriving(Show)] pub enum List { Nil, Cons(A, Box>) } pub fn cons(x: A, xs: Box>) -> Box> { match *xs { Nil => box Cons(x, box Nil), l => box Cons(x, box l) } } pub fn first(xs: List) -> Option { match xs { Nil => None, Cons(x, _) => Some(x) } } pub fn main() { let nil: List = Nil; let ns: Box> = cons(1i, cons(2, cons(3, box Nil))); println!("nil = {}, ns = {}", nil, ns); println!("first(nil) = {}, first(ns) = {}", first(nil), first(*ns)); }