Infinite types

oleg at pobox.com oleg at pobox.com
Mon Dec 8 17:51:47 EST 2003


Jeffrey A. Scofield wrote:
> Say I have the following function, adapted from Pierce, Types and
> Programming languages:
>
>     f n () = (n, f (n + 1))

But a simple modification seems to cures the problem:

> newtype W = W (Int, () -> W)
>
> f n () = W (n, f (n + 1))
>
> w2list (W (n,f)) = n:(w2list $ f ())

*Main> take 5 $ w2list (f 7 ())
[7,8,9,10,11]

It works in Haskell98. Actually, at first I thought your problem is
more complex. I thought it requires existential quantification to get
the infinite type:

> {-# OPTIONS -fglasgow-exts #-}
>
> -- Emulating Peano integers
>
> data W = forall a. (Show a) => W a
>
> instance Show W where show (W a) = show a
>
> f 0 = W ([]::[()])
> f n = case f (n-1) of (W x) -> W [x]

*Main> f 5
[[[[[[]]]]]]


More information about the Haskell-Cafe mailing list