Je cette ADT assez simple:personnalisé par exemple Functor: type attendu '* -> *', mais 'AST' a en quelque sorte '*'
data AST = Node String [AST]
| Leaf String
| Empty
deriving (Show)
et cette instance Functor:
instance Functor AST where
fmap f (Node s l) = Node (f s) (fmap f l)
fmap f (Leaf s) = Leaf (f s)
fmap f Empty = Empty
Mais lorsque je tente de compiler je reçois cette erreur que je ne comprends pas tout à fait:
Expected kind ‘* -> *’, but ‘AST’ has kind ‘*’
• In the first argument of ‘Functor’, namely ‘AST’
In the instance declaration for ‘Functor AST’
Est-ce que quelqu'un sait pourquoi cela se produit? Je ne peux pas trouver une solution sur Internet.
Pour vérifier la cohérence, est-ce que cette instance 'fmap' fait quoi que ce soit? Les instances 'Functor' contiennent des choses que l'on peut" cartographier "mais il n'y a pas de données telles que les données cartographiables dans votre AST. – jozefg
Les catégoriques devraient noter que les définitions 'AST' et' fmap' constituent ici un foncteur catégorique parfaitement sensible, même si elles ne font pas de 'Functor 'Haskell valide. – pigworker