module Sum; data Nat = Zero | S(Nat); def Nat fold(f)(Nat z, List xs) = case xs { Nil => z; Cons(x,xsP) => f(x, fold(z,xsP)); }; def Nat plus(Nat x, Nat y) = case x { Zero => y; S(xP) => S(plus(xP, y)); }; def Nat sum(List l) = fold(plus)(Zero, l); def Nat start(List l) = sum(l); { }