以下代码无法编译:
data Outcome a = Fail | Pass a deriving (Show, Eq, Ord, Functor)
myList = [Pass 33, Pass 12, Fail, Pass 45]
main = do
print $ fmap (+1) myList
我不明白为什么这不起作用,因为我已经成功地将相同的方法应用于我的二叉树类型'data Tree a = Empty |节点a(树a)(树a)'?
答案 0 :(得分:11)
问题在于您尝试向列表myList
的每个元素Outcome Integer
添加1。试试这个:
fmap (fmap (+1)) myList
或者说得更清楚:
map (fmap (+1)) myList
因此外部fmap
适用于列表,而内部Outcome
适用于fmap (+1)
仿函数。因此,对于列表中的每个元素,我们应用函数(+1)
,然后将函数Outcome
应用于composer.json
内的值。
答案 1 :(得分:6)
列表是仿函数,你有一个[Outcome]
所以你需要提供一个函数Outcome -> b
。您似乎希望将(+1)
应用于列表中的每个Outcome
,因此您需要使用:
fmap (\o -> fmap (+1) o) myList
或
fmap (fmap (+1)) myList