datatype ('a, 'b) prod = Pair of 'a * 'b ; datatype ('a) list = Cons of 'a * ('a) list | Nil ; val HD = (fn x1 => (case x1 of Nil => (raise Bind) | (Cons (v2, v1)) => v2)) ; val TL = (fn x1 => (case x1 of Nil => (raise Bind) | (Cons (v2, v1)) => v1)) ; fun APPEND v3 = (fn v4 => (case v3 of Nil => v4 | (Cons (v2, v1)) => (Cons (v2, ((APPEND v1) v4))))) ; fun REV v3 = (fn v4 => (case v3 of Nil => v4 | (Cons (v2, v1)) => ((REV v1) (Cons (v2, v4))))) ; val REVERSE = (fn v1 => ((REV v1) Nil)) ;