1

我想像这样打印 fmap 的结果

 putStrLn <- fmap (replicate 3) [1,2,3,4]

但是我得到了 putStrLn 解析错误。请帮忙。

谢谢你。

4

2 回答 2

5

这里的正确语法是:

putStrLn $ show $ fmap (replicate 3) [1,2,3,4]

或者,甚至更短:

print $ fmap (replicate 3) [1,2,3,4]
于 2013-10-25T02:45:21.410 回答
5

完全不是提问者正在寻找的答案,但幽默的是他的语法误解仍然是有效的 Haskell 代码:

do putStrLn <- fmap (replicate 3) [1,2,3,4]
   return putStrLn

上面使用 list monad 并且值putStrLn只是一个变量(不是人们可能期望的 IO 操作)。如果表示为列表推导而不是使用列表单子,它可能对人们更有意义:

> [ putStrLn | putStrLn <- map (replicate 3) [1,2,3,4]]
[[1,1,1],[2,2,2],[3,3,3],[4,4,4]]
于 2013-10-25T04:33:41.487 回答