我对列表和单子完全感到困惑,所以也许我的问题不正确或者很天真。我在这里看到了使用mapM_ func的方法。
mapM_ print [1, 2, 3, 4]
但我不知道它的具体工作原理,想知道如何像这样实现:
x <- [1, 2, 3]
print x
或者,如果我理解正确:
[1, 2, 3] >>= print
我理解[1, 2, 3]的类型是[a],而print的类型是Show a => a -> IO ()。此外,我明白使用Monad List需要左边的类型是List a,右边带有类型为a -> List b的函数。我的理解正确吗?你需要帮忙吗? 更新。感谢@MathematicalOrchid对mapM_如何工作的解释。从我的角度来看,真正的问题不在于在不同行打印任何结果,而在于以Monad List提供的方式执行一些monadic操作(因为现在我正在处理OpenGL的东西)。但是我知道误解的根源在于混淆了monads。 更新2。感谢大家回答。对于这个有点含糊的问题我感到抱歉。我并不完全知道我需要什么样的答案和问题是什么。这是因为我没有理解一些基础知识。所以现在很难选择“正确的答案”,因为每个答案都包含了我要找的一个小部分。我已经决定选择最接近(尽管现在不是最有用的)我想要的内容。
forM_
可能看起来更加熟悉。它只是将mapM_
的参数反转了一下。尝试使用forM_ [1, 2, 3] print
。 - jtobinList
和IO
。您的>>=
不起作用的原因是您试图混合这两个单子。 - stusmith