Another way to defer the evaluation of the second argument of (-+) is like this: (-+) :: a -> List a -> List a x -+ y = List(f) where f 0 = x f k = case y of List g -> g (k-1) This is exactly what the lazy pattern will do at compile-time. Does this give you a better understanding of how lazy patterns work and why they fix the problem? -- ryan On 3/27/08, Hans Aberg <haberg@math.su.se> wrote:
On 27 Mar 2008, at 17:51, Luke Palmer wrote:
A more standard way to do this would be:
data List a = List (Ordinal -> a) Ordinal
I used data List a = Empty | (Ordinal->a) :+ Ordinal which might then be simplified by dropping "Empty".
Hans Aberg
_______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe