
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
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