Hi, in the context of the newtype wrapper I have an instance selection problem where even IncoherentInstances is not liberal enough. Consider this example:
Prelude> :set -XFlexibleInstances -XIncoherentInstances -XMultiParamTypeClasses Prelude> class Class a b where { method :: (a,b); method = undefined } Prelude> instance Class a b => Class [a] [b] Prelude> instance Class a a Prelude> :t method :: ([a],[a]) <interactive>:1:1: Overlapping instances for Class [a1] [a1] arising from a use of `method' Matching instances: instance [incoherent] Class a b => Class [a] [b] -- Defined at <interactive>:4:10 instance [incoherent] Class a a -- Defined at <interactive>:5:10 In the expression: method :: ([a], [a]) As none of the two instances are more specific than the other, the typechecker stops despite the incoherent flag. My suggestion is to add another flag, this time to the class declaration, marking the class as univalent (different naming suggestions welcome, of course), indicating that it will generally not matter which instance is selected, and in the case of overlap the typechecker should just pick any matching instance. Would such a feature be welcome? I could imagine that it might be more useful in other settings as well, e.g. if type classes are pure predicates about types, without any methods. Greetings, Joachim PS: I will be on a summer school the next two week. I have written down the status of the newtype coercion implementation at http://ghc.haskell.org/trac/ghc/wiki/NewtypeWrappers#Status -- Joachim “nomeata” Breitner m...@joachim-breitner.de • http://www.joachim-breitner.de/ Jabber: nome...@joachim-breitner.de • GPG-Key: 0x4743206C Debian Developer: nome...@debian.org
signature.asc
Description: This is a digitally signed message part
_______________________________________________ ghc-devs mailing list ghc-devs@haskell.org http://www.haskell.org/mailman/listinfo/ghc-devs