Haskell wiki имеет следующий вопрос:
https://en.wikibooks.org/wiki/Haskell/Higher-order_functions
for :: a -> (a -> Bool) -> (a -> a) -> (a -> IO ()) -> IO ()
for i p f job = -- ???
Я смог придумать следующую реализацию:
generate :: a -> (a->Bool) -> (a->a) -> [a]
generate s cnd incr = if (cnd s) then [] else [s] ++ generate (incr s) cnd incr
-- collapse :: [IO ()] -> IO ()
-- collapse (x:xs) = x ++ collapse xs
-- does not work ^^^^^^
for::a->(a->Bool)->(a->a)->(a->IO())->IO()
for s cnd incr ioFn = map (ioFn) (generate s cnd incr)
Ofcourse map (ioFn) (generate s cnd incr)
приводит к [IO ()]
.Я не уверен, как это можно преобразовать в IO ()
Мне нужно что-то вроде foldl
, но тот, который работает с [IO ()]
вместо [a]
.