[Haskell-cafe] ambiguous type variables at MPTC

Tom Schrijvers Tom.Schrijvers at cs.kuleuven.be
Sun May 13 06:14:37 EDT 2007


> If f2 is legal, why if f3 illegal? For some usage site of f3, the
> constraint C String b might allow b to be resolved given whatever
> instances of C are in effect.
>
> Is there a motivation for these behaviors?
>
> Are these sorts of cases discussed in the CHR/FD paper that motivated
> the coverage condition (which I have yet to read)?

It should be possible to resolve the constraints from the types in the 
signature. That rules out f1 and f3.

For f2, given a type for a, say Int, not just any odd instance for b will 
do, say

 	instance C Int Bool

GHC says:

     No instance for (C Int b)
       arising from use of `f2' at Q.hs:30:6-9
     Possible fix: add an instance declaration for (C Int b)
     In the expression: f2 x
     In the definition of `f': f x = f2 x

No, it has to be an instance for all possible types b:

 	instance C Int b

So, you can only call f2 with types a for which the instance C a b is 
completely independent of b. There is no ambiguity.

Tom

--
Tom Schrijvers

Department of Computer Science
K.U. Leuven
Celestijnenlaan 200A
B-3001 Heverlee
Belgium

tel: +32 16 327544
e-mail: tom.schrijvers at cs.kuleuven.be


More information about the Haskell-Cafe mailing list