foldl和IO值

Sha*_*nce 3 io haskell fold

我有这样的代码:

foldl (\a x -> a ++ (f x)) [] list
Run Code Online (Sandbox Code Playgroud)

一切似乎都没问题,但是(f x) :: IO [String],并(++)给出了一个错误([String]!= IO [String]).

如何定义空IO [String]列表?我不能干净(fx).

Dan*_*her 12

你想要的组合器可能是

Prelude Control.Monad> :t foldM
foldM :: Monad m => (a -> b -> m a) -> a -> [b] -> m a
Run Code Online (Sandbox Code Playgroud)

并与此

foldM (\a x -> fmap (a++) (f x)) [] list
Run Code Online (Sandbox Code Playgroud)

f x按顺序运行动作并累积[String]它们产生的动作.