type 'a list = | Nil | Cons of 'a * 'a list let rec append m n = match m with | Nil -> n | Cons(x, m') -> Cons(x, append m' n) type 'a list01 = | Nil01 | Cons0 of 'a list01 | Cons1 of 'a * 'a list01 let rec append01 m n = match m with | Nil01 -> n | Cons0 m' -> Cons0 (append01 m' n) | Cons1(x, m') -> Cons1(x, append01 m' n)