【发布时间】:2014-07-11 19:18:57
【问题描述】:
这很好用:
data Foo a = Foo a
instance Functor Foo where
fmap f (Foo s) = Foo (f s)
这会引发错误:
data Foo = Foo String
instance Functor Foo where
fmap f (Foo s) = Foo (f s)
错误:
种类不匹配
`Functor' 的第一个参数应该是 `* -> *',
但是 `Foo' 有种 `*'
在 `Functor Foo' 的实例声明中
我在这里缺少什么?如果 Foo 包含特定类型,为什么我不能使用函子来包装和解包?
更新
我想我可以换个方式问这个问题:
data Foo = Foo String deriving(Show)
let jack = Foo "Jack"
-- Some functory thingy here
putStrLn $ show $ tail <$> jack
-- Foo "ack"
为什么我不能这样做?或者这个用例还有其他构造吗?
【问题讨论】:
标签: haskell