Comment puis-je contraindre à Maybe a où Eq a ? Il faut que ce soit du type * -> Contrainte
Ce que j'ai essayé :
class (a ~ Maybe b, Eq b) => K a where
instance (a ~ Maybe b, Eq b) => K a where
Erreur :
Not in scope: type variable ‘b’
Exemple d'utilisation :
data Test c = forall a. (c a) => Test a
r :: Test K -> Maybe Bool
r (Test o) = (==) <$> o <*> o -- I need GHC to infer that o is Maybe Eq
Des cas qui fonctionnent :
pp :: Test ((~) String) -> String
pp (Test o) = o ++ "X" -- GHC infers that o is a string
hh :: Test Eq -> Bool
hh (Test o) = o == o -- GHC infers that o is Eq
Réponse générique ici : Existe-t-il un moyen général d'appliquer des contraintes à une application de type ?