[EMAIL PROTECTED] wrote: > Simon Peyton-Jones <[EMAIL PROTECTED]> writes: > >>> My suggestion is that there should be a single default type >>> per class. >> >> Ah, I missed that. > > I suppose, because the proposed new rule is so simple and short, it is > rather easy to miss its implications, especially if you are used to > thinking in terms of the existing more complicated rule. > >> Suppose I have >> default Eq Integer >> default Fractional Float >> and I have (Eq a, Fractional a). Does 'a' resolve to > Integer or to Float? Perhaps a few examples on the proposal > page would be useful for readers? > > The proposed rule is that defaulting applies *after* simplification of > the context. So, although you initially infer > (Eq a, Fractional a) => a > but after simplification, this becomes > (Fractional a) => a > so there is a single class to be defaulted, and Float is chosen.
Is your proposal supposed to be backwards compatible with Haskell 98 for programs that don't have default declarations? If so, then I offer a counter example: toRational pi will default pi to Double in Haskell 98, but will be an error under your proposal, because the two constraints (Real and Floating) disagree on the default. dflt.hs:3:7: Warning: Defaulting the following constraint(s) to type `Double' `Real a' arising from use of `toRational' at dflt.hs:3:7-19 `Floating a' arising from use of `pi' at dflt.hs:3:18-19 In the expression: toRational pi In the definition of `test': test = toRational pi You can generate more examples using Enum/Fractional combinations, but it's dubious whether Float & Double should be instances of Enum anyway. Cheers, Simon _______________________________________________ Haskell-prime mailing list Haskell-prime@haskell.org http://www.haskell.org/mailman/listinfo/haskell-prime