module RevDl; def B comp(f, g)(A x) = f(g(x)) ; def A id(A x) = x; //(* walk :: list -> (list -> list) *) def B walk(List xs) = case xs { Nil => id; // Higher-order constructs are not supported by abs! Cons(x, xsP) => ((A a) => comp(wal(xsP), ((List ys) => Cons(x,ys)))(a)); }; // (* rev :: list -> list *) // def List rev(List l) = // in walk l Nil { }