All About Monads解释说sequence_:
该
sequence_功能(注意下划线)具有相同的行为sequence,但不返回结果的列表.当只有monadic计算的副作用很重要时,它是有用的.
然后,看看TestSequence.hs:
import Control.Monad
f :: String -> IO ()
f x = print x
run :: [String] -> IO ()
run xs = sequence_ . map f $ xs
Run Code Online (Sandbox Code Playgroud)
我可以运行它:
?: run ["foo", "bar"]
"foo"
"bar"
Run Code Online (Sandbox Code Playgroud)
是sequence_呼吁unsafePerformIO各IO ()得到的结果,即()?
并且,sequence_气馁?或者,它是否IO Monad仅仅用于"在世界末日"运行一系列IO行动?
Dan*_*ner 11
不,它没有呼吁unsafePerformIO每一个IO ()行动.事实上,它的类型甚至不是特定的IO:
sequence_ :: (Monad m, Foldable t) => t (m a) -> m ()
Run Code Online (Sandbox Code Playgroud)
在旧库中,当它特定于列表(而不是所有Foldables的泛型)时,它以下面的完全可读方式实现:
sequence_ [] = return ()
sequence_ (x:xs) = x >> sequence_ xs
Run Code Online (Sandbox Code Playgroud)
绝对不气馁; sequence_(以及它的大哥mapM_)非常有用,它甚至是我为什么Monad作为抽象有用的激励性例子之一.
| 归档时间: |
|
| 查看次数: |
536 次 |
| 最近记录: |