¿Con restricciones cuantificadas puedo derivar Eq (A f)
bien? Sin embargo, cuando intento derivar Ord (A f) falla. No entiendo cómo usar restricciones cuantificadas cuando la clase de restricción tiene una superclase. ¿Cómo obtengo Ord (A f)
y otras clases que tienen superclases?
> 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)'
PD. También he examinado las propuestas de ghc 0109-restricciones cuantificadas . Usando ghc 8.6.5
fuente
deriving instance (forall a. (Eq a, Ord a) => (Eq (f a), Ord (f a))) => Ord (A f)
. ¿Sabes por qué hay una diferencia?forall a. Eq a => Eq (f a)
. (visto en términos de lógica(A /\ B) => (C /\ D)
no implicaA => C
)forall a. Ord a => Ord (f a)
.