0
stuff :: IO [String]
doThings :: String -> IO [()]
,我想
stuff >>= doThings
,但我的類型了。我想本質上做一個提升的綁定,但我所嘗試的一切都很微妙。
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
'do xs < - stuff; mapM_ doThings xs'?你究竟想要做什麼。另外:'[(()]'是一個非常無用的類型。是不是'足夠'?或者你不能只有'String - > IO()'類型嗎? – Bakuriu
謝謝!我將'[()]'改成了'()'並使用了'mapM_',它效果很好! –
你可以用'mapM'來保留'[(()]'(假設你有一些理由要這麼做)。注意Haskell中尾部的'_'通常意味着「忽略結果」。 –