On 3/19/07, Ian Lynagh <[EMAIL PROTECTED]> wrote:
I'd really like to be able to define an eta-reduced Id; I see two
possibilities:
* Allow "type Id =" (I prefer this to "type Id" as I think we are more
likely to want to use the latter syntax for something else later on).
* Implementations should eta-reduce all type synonyms as much as
possible, e.g.
type T a b c d = X a b Int c d
is equivalent to
type T a b = X a b Int
and
type Id a = a
is equivalent to a type that cannot be expressed directly.
Any opinions?
A third possibility is to have "Id" be a special primitive type constructor
of kind * -> * that implementations handle internally. If you wanted to give
it different name you could use an eta-reduced type synonym for that, of
course.
That's the approach I took when I needed an identity type function in the
Bluespec compiler, and that worked out reasonably well. Part of the reason
that worked out, though, is that we already had a normalization point during
typechecking where certain special type constructors (related to numeric
types) were cleaned out, so adding Id just extended that a little.
I don't know whether adding such a constructor would be an equally simple
change for Haskell implementations. And there's the separate argument that
requiring eta-reduction of all type synonyms might be an interesting new
feature in its own right (since I think you can say other new things beyond
type Id a = a).
- Ravi
_______________________________________________
Haskell-prime mailing list
[email protected]
http://www.haskell.org/mailman/listinfo/haskell-prime