class Cpo class Cppo %%Recursion then
var a: Cpo
free type List a ::= nil | cons (a) (List a) deriving Cpo
var b: Cppo; z: b; f: b --> a --> b; x: a; l: List a
op foldl: b --> (b --> a --> b) --> List a --> b
program
foldl z f nil = z;
foldl z f (cons x l) = foldl (f z x) f l