[Haskell-cafe] Recursion problem in infinite list model
Luke Palmer
lrpalmer at gmail.com
Thu Mar 27 10:32:23 EDT 2008
On Thu, Mar 27, 2008 at 2:18 PM, Claude Heiland-Allen
> The combination of (-+) and h is too strict, this modification works:
>
>
> (-+) :: a -> List a -> List a
> x -+ ~(List y) = List(f) where -- lazy pattern match
>
> f 0 = x
> f k = y(k-1)
More to the point, if List is declared as:
newtype List a = List (Integer -> a)
Instead of with "data", it also works.
The problem, as was stated, was that -+ is too strict. That is,
without the ~ there, -+ evaluates its right argument to make sure it's
not _|_ (that is the only other possibility in this case), and then
proceeds with the rest of the function. So in:
h x = first x -+ h (rest X)
This first evaluates the recursive call, which will evaluate the
recursive call, which ...
Luke
More information about the Haskell-Cafe
mailing list