I can't track this one down, so I'll post it:
Prelude> :t let f = const 1 in let g = f in g
let {...} in (let {...} in g) :: Num a => b -> c
The error here is that a and c should be identified. In larger examples,
this can cause real trouble.
More detail: f is subject to the Monomorphism Restriction, so its
return type should be monomorphic. Hugs gets this right, as seen in
Prelude> :t let f = const 1 in (f,f)
let {...} in (f,f) :: Num a => (b -> a,c -> a)
However it loses the constraint on the type of g, as seen in
Prelude> :t let f = const 1 in let g :: a -> b; g = f in g
let {...} in (let {...} in g) :: Num a => b -> c
(which it should reject). It seems essential that the type of f contain
fully polymorphic variables as well as the constrained one.
_______________________________________________
Hugs-Bugs mailing list
[EMAIL PROTECTED]
http://www.haskell.org/mailman/listinfo/hugs-bugs