On 27 Mar 2008, at 15:32, Luke Palmer wrote:
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 ...
Thank for the suggestion, and explanation.
The reason I used a "data" construct was that I include the size of
the list, excluded in order to keep the example as simple as possible:
data List a = List(Ordinal -> a, Ordinal)
In addition, there seems to be no way to choose default value for a
given (non-empty) type in Haskell, so I wrote it
data List a = Empty | List(Ordinal -> a, Ordinal)
Here, if a type T has a default element t, I can represent the empty
list by
List(\_ -> t, 0)
making the constructor "Empty" redundant.
Hans Aberg
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe