> Interesting! Phil, Mark, and Jeff all have a different interpretation of
> how contexts on how data type declarations work than I did. So unless
> some other people chime in, I will therefore adopt their interpretation,
> since (a) I'm in the minority and (b) it's not a big deal at all.
I agree with Phil, Mark, and Jeff. Here is another explanation. The "meaning" of an
overloaded function f :: P a => F a -> G a is the set of functions { f :: F a -> T a |
P a}, now if we take the inverse of these functions we get the set { g :: T a -> F a |
P a } which is the meaning of the qualified type g :: P a => T a -> F a. Selectors
form "the inverse" of constructors (you know what I mean :-) hence they should be
overloaded as well.
Erik