Vu le code suivant:Typeclasses 101: GHC trop "désireux" de dériver l'instance?
class C a where
foo :: a -> a
f :: (C a) => a -> a
f = id
p :: (C a) => (a -> a) -> a -> a
p g = foo . g
Maintenant, si je tente d'invoquer pF, GHC se plaint:
> p f
No instance for (C a0) arising from a use of `p'
In the expression: p f
In an equation for `it': it = p f
Je trouve cela un peu surprenant, puisque f accepte seulement un "a" qui doit être une instance de la classe C. Quelle est la raison?
Edit: Je sais que je ne définissaient pas une instance C mais ne devrait pas la réponse « appropriée » être:
p f :: (C a) => a -> a
'p f :: (C a) => a -> est la réponse a' propre à': t p f', mais vous avez entré 'p f'. –
La question que GHCi pose est, * "Je sais que c'est une instance de' C', mais de quelle instance s'agit-il? Sinon, je ne peux pas déterminer si je peux le 'montrer' ou non. "* – AJFarmar