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

Reply via email to