To the Haskell 1.3 committee,
Two choices in the design of Haskell are:
Should products be lifted?
Should functions be lifted?
Currently, the answer to the first is yes, and to the second is no.
This is ad hoc in the extreme, and I am severely embarrassed that I did
not recognise this more clearly at the time we first designed Haskell.
Dear committee, I urge you, don't repeat our earlier mistakes! John
Hughes makes a compelling case for yes; and mathematical cleanliness
makes a compelling case for no. I slightly lean toward yes. (John is a
persuasive individual!) But unless someone presents a clear and clean
argument for answering the two questions differently, please answer
them consistently.
If both questions are answered yes, then there is a choice as to
whether or not to have a Data class. Indeed, there are two choices:
Should polymorphic uses of seq be marked by class Data?
Should polymorphic uses of recursion be marked by class Rec?
John Launchbury and Ross Paterson have written a beautiful paper urging
yes on the latter point; ask them for a copy. Here, I have a mild
preference to answer both questions no, as I think the extra
complication is not worthwhile. But again, please answer them
consistently.
Cheers, -- P