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中尾部的'_'通常意味着“忽略结果”。 –