Avec des contraintes quantifiées, je peux dériver Eq (A f)
très bien? Cependant, lorsque j'essaie de dériver Ord (A f), cela échoue. Je ne comprends pas comment utiliser des contraintes quantifiées lorsque la classe de contraintes a une superclasse. Comment puis-je dériver Ord (A f)
et d'autres classes qui ont des superclasses?
> newtype A f = A (f Int)
> deriving instance (forall a. Eq a => Eq (f a)) => Eq (A f)
> deriving instance (forall a. Ord a => Ord (f a)) => Ord (A f)
<interactive>:3:1: error:
• Could not deduce (Ord a)
arising from the superclasses of an instance declaration
from the context: forall a. Ord a => Ord (f a)
bound by the instance declaration at <interactive>:3:1-61
or from: Eq a bound by a quantified context at <interactive>:1:1
Possible fix: add (Ord a) to the context of a quantified context
• In the instance declaration for 'Ord (A f)'
PS. J'ai également examiné les propositions ghc 0109-quantified-contraintes . Utilisation de ghc 8.6.5
la source
deriving instance (forall a. (Eq a, Ord a) => (Eq (f a), Ord (f a))) => Ord (A f)
. Savez-vous pourquoi il y a une différence?forall a. Eq a => Eq (f a)
plus. (vu en termes de logique(A /\ B) => (C /\ D)
n'implique pasA => C
)forall a. Ord a => Ord (f a)
.