Dengan batasan kuantitatif saya dapat memperoleh dengan Eq (A f)
baik? Namun, ketika saya mencoba untuk menurunkan Ord (A f) gagal. Saya tidak mengerti bagaimana menggunakan batasan terkuantifikasi ketika kelas kendala memiliki superclass. Bagaimana cara mendapatkan Ord (A f)
dan kelas lain yang memiliki kacamata super?
> 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. Saya juga telah memeriksa proposal ghc 0109-terkuantifikasi-kendala . Menggunakan ghc 8.6.5
sumber
deriving instance (forall a. (Eq a, Ord a) => (Eq (f a), Ord (f a))) => Ord (A f)
. Tahukah Anda mengapa ada perbedaan?forall a. Eq a => Eq (f a)
. (Dilihat dari segi logika(A /\ B) => (C /\ D)
tidak menyiratkanA => C
)forall a. Ord a => Ord (f a)
.