我在 Real World Haskell 的 I/O 章节。书中还有 7 章没有讨论 Monad。也就是说,我对 I/O 的理解充其量是不完整的。
现在我正在尝试理解 mapM 函数。据我了解,该函数“执行”列表中必须是“动作”(IO monad)的每个元素。
没有意义的是这个例子。为什么 mapM 对于相同的参数返回与 map 不同的结果?
Prelude> map (\x -> [x]) [0, 1, 2] [[0],[1],[2]] 前奏> mapM (\x -> [x]) [0, 1, 2] [[0,1,2]]