我只是对列表和单子完全感到困惑,所以也许我的问题不正确或非常幼稚。我在这里看到了使用 mapM_ func 的方法:
mapM_ print [1, 2, 3, 4]
但我不确切知道它是如何工作的,并且想知道如何以这样的方式做到这一点:
x <- [1, 2, 3]
print x
或者,如果我理解正确:
[1, 2, 3] >>= print
我知道 [1, 2, 3] 有 type[a]
并且 print 有 type Show a => a -> IO ()
。我也明白,为了使用 monad List,我们需要List a
左边的类型和a -> List b
右边的类型。我对吗?你能帮我解决这个问题吗?
升级版。感谢@MathematicalOrchid 解释 mapM_ 的工作原理。从我的角度来看,我想解释真正的问题不是在不同的行中打印任何结果,而是以 monad List 提供的方式执行一些 monadic 操作(因为现在我在 OpenGL 周围徘徊)。但我知道误解的根源在于混合单子。
UPD2。谢谢大家的回答。我为这个模糊的问题道歉。我不完全知道我需要什么答案以及问题是什么。那是因为我不了解一些基础知识。所以现在很难选择“正确的答案”,因为每个答案都与我正在寻找的东西有点和平。我决定选择最接近我想要的(虽然现在不是最有用的)。