【发布时间】:2017-07-21 10:52:03
【问题描述】:
我有这个相当简单的 ADT:
data AST = Node String [AST]
| Leaf String
| Empty
deriving (Show)
还有这个 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
但是当我尝试编译它时,我得到了这个我完全不明白的错误:
Expected kind ‘* -> *’, but ‘AST’ has kind ‘*’
• In the first argument of ‘Functor’, namely ‘AST’
In the instance declaration for ‘Functor AST’
有人知道为什么会这样吗?我在 Internet 上找不到解决方案。
【问题讨论】:
-
作为健全性检查,这个实例
fmap真的有什么作用吗?Functor实例包含可以“映射”的东西,但在您的 AST 中没有这样的可映射数据。 -
有分类意识的人应该注意,这里的
AST和fmap定义构成了一个完全合理的分类函子,即使它们没有构成有效的 HaskellFunctor。
标签: haskell functor abstract-data-type