Ich habe diese recht einfache ADT:Benutzerdefinierte Functor Beispiel: Erwartete Art '* -> *', sondern 'AST' hat Art '*'
data AST = Node String [AST]
| Leaf String
| Empty
deriving (Show)
und dieses Functor Beispiel:
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
Aber wenn ich versuche, es zu kompilieren ich diesen Fehler, die ich absolut nicht verstehen:
Expected kind ‘* -> *’, but ‘AST’ has kind ‘*’
• In the first argument of ‘Functor’, namely ‘AST’
In the instance declaration for ‘Functor AST’
weiß jemand, warum dies geschieht? Ich kann im Internet keine Lösung finden.
Als eine Gesundheitsprüfung, tut diese Instanz 'fmap' tatsächlich etwas? 'Functor'-Instanzen enthalten Dinge, über die man" mappen "kann, aber es gibt keine Daten, die solche mappbaren Daten in Ihrem AST enthalten. – jozefg
Der kategorisch Gesinnte sollte beachten, dass die 'AST' und' fmap' Definitionen hier einen vollkommen sinnvollen kategorischen Funktor darstellen, auch wenn sie keinen gültigen Haskell 'Functor' ergeben. – pigworker