module TakeLazy; data Nat = Zero | S(Nat); // Lazyness removed, as not supported by abs! def List take_l(Nat n, List xs) = case xs { Nil => Nil; Cons(x,xsP) => case n { Zero => Nil; S(nP) => Cons(x, take_l(nP, xsP)); }; }; def List zeros() = Cons(Zero, zeros()); // let main n zeros = take_l n zeros;; // def List start(Nat n, List zeros) = take_l(n,zeros); def List start(Nat n) = take_l(n,zeros()); { }