KAc*_*ion 2 monads haskell higher-order-functions
我有以下问题:给出一个[String]和String->IO Int.所以我可以进行转换(地图)并获得[IO Int].现在,我必须做两件事 - 从行动起,直到结果是积极的,我需要知道,所有列表都被处理了.在第一次非正面结果后我被禁止处理.
takeWhileM不回答第二个问题(长度比较太不切实际),并且spanM禁止执行IO.
当然,我自己也可以编写递归函数,但我希望以Haskell的方式完成它,具有所有优良的高阶函数.
建议?可能完全使用另一种方法?上面的任务是我的项目中的一个简单任务.
您可以使用allM从该monad-loops软件包:
Prelude Control.Monad.Loops> let xs = ["a", "bb", "ccc", "dddd", "eeeee"]
Prelude Control.Monad.Loops> let f x = putStrLn x >> return (length x)
Prelude Control.Monad.Loops> let p x = x < 2
Prelude Control.Monad.Loops> allM (fmap p . f) xs
a
bb
False
Run Code Online (Sandbox Code Playgroud)
还有一个allMin Control.Monad.ListM,但它不是很懒惰 - 它会在你获得正面结果后继续执行计算.
(顺便说一句,我和你在一起 - 我讨厌写一次性的递归函数.)