Mit quantifizierten Einschränkungen kann ich gut ableiten Eq (A f)
? Wenn ich jedoch versuche, Ord (A f) abzuleiten, schlägt dies fehl. Ich verstehe nicht, wie quantifizierte Einschränkungen verwendet werden, wenn die Einschränkungsklasse eine Oberklasse hat. Wie leite ich Ord (A f)
und andere Klassen ab, die Superklassen haben?
> 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. Ich habe auch ghc Vorschläge 0109-quantifizierte Einschränkungen untersucht . Verwenden von ghc 8.6.5
quelle
deriving instance (forall a. (Eq a, Ord a) => (Eq (f a), Ord (f a))) => Ord (A f)
. Wissen Sie, warum es einen Unterschied gibt?forall a. Eq a => Eq (f a)
. (In Bezug auf die Logik(A /\ B) => (C /\ D)
bedeutet dies nichtA => C
)forall a. Ord a => Ord (f a)
.