list a ::= Nil | Cons a (list a); ;; foldr f a l = case l of Nil -> a; Cons x xs -> f x (foldr f a xs) end; append l1 l2 = case l1 of Cons x xs -> Cons x (append xs l2); Nil -> l2 end; concat = foldr append Nil;