A few comments:
On Thu, Mar 27, 2008 at 2:55 PM, Hans Aberg <[EMAIL PROTECTED]> wrote:
> 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)
This could still be a newtype, because of the tuple you used here. A
more standard
way to do this would be:
data List a = List (Ordinal -> a) Ordinal
Or a record so you could name them.
By your naming, am I correct in assuming that you're implementing
transfinite lists?
If so, cool!
> 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.
You could use 'undefined', which has value _|_ (if you're sure that
it will never
be used).
List (const undefined) 0
Or even:
List undefined 0
Which are almost, but not quite, identical. (Many argue they should be)
Luke
_______________________________________________
Haskell-Cafe mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-cafe