module ListRev1; // let comp f g = fun z -> f (g z);; // def B comp(f,g)() = (A z) => f(g(z)); // Error def B comp(f,g)(A z) = f(g(z)); // let rev1 l = // let rec walk = function // [] -> (fun ys -> ys) // | x :: xs -> comp (walk xs) (fun ys -> x :: ys) // in walk l [];; def A id(A x) = x; def List walk(List l) = case l { Nil => id; Cons(x,xs) => comp((walk(xs)), ((List ys) => Cons(x, ys))); } def List rev1(List l) = walk(l, Nil); def List start(List l) = rev1(l); { }