[Haskell] Num is such a fat and greedy class
lennart at augustsson.net
Mon Dec 11 08:57:15 EST 2006
On Dec 11, 2006, at 03:50 , Johannes Waldmann wrote:
> let data Bar = ... in ...
If you allow this you need to be very careful about type equality.
When is Bar equal to Bar?
If it's inside a recursive function, does each invocation get its own
Bar? (In SML the answer is yes.) If you decide the answer is no,
then is the beta rule still valid? E.g.,
let x = (let Bar = ... in ...) in ... x ... x ...
expand x (which has always been semantically valid in Haskell)
... (let Bar = ... in ...) ... (let Bar = ... in ...) ...
Are those two Bar types equal?
In Cayenne I allowed all these things, but the price is that Cayenne
has structural equality on types rather than nominal. Switching to
nominal to structural would be a major change in Haskell.
So this change may look innocuous, but it has big ramifications.
More information about the Haskell