
Ross Paterson wrote:
Where can I read this understanding? The GHC docs on FDs are terse, referring to the original paper, but that paper is somewhat informal, and describes a weaker system than what is implemented. For example, (taken from s7 of the paper), given
class U a b | a -> b where u :: a -> b class U a b => V a b where v :: a -> b
the paper says that the principal type of \x -> (u x, v x) is
(U a b, V a c) => a -> (b,c)
According to GHC and Hugs, it is
V a b => a -> (b,b)
I think that's sensible, but where are the rules that give it? I suspect that writing this addendum may take a while.
Thats just a type simplification, in the source, we have \x -> (u x, v x) the type checker knows both x's are the same, and it knows that (V a b) is the same as (U a b)... So in this case it looks like the second type is just a simplification of the first... so they really agree on the type, not disagree. Keean.