Haskell: monad stack bind with IO and []

Haskell: monad stack bind with IO and []

我有:

stuff :: IO [String]
doThings :: String -> IO [()]

我想

stuff >>= doThings

但我的类型不对。我基本上想做一个解除绑定,但我尝试的一切都是微妙的错误。

使用您的原始类型,您可以:

stuff >>= mapM_ doThings

如果您将 doThings 的类型更改为 doThings :: String -> IO ()

,这也有效

如果你有很多这样的功能,这是ListT的教科书用例:

main = runListT $ do
  string <- ListT stuff
  ListT $ doThings string