Предположим, я получаю большой список элементов во время работы с IO:
as <- getLargeList
Теперь я пытаюсь применить fn :: a -> IO b
на as
:
as <- getLargeList
bs <- mapM fn as
mapM
имеет тип mapM :: Monad m => (a -> m b) -> [a] -> m [b]
, и это то, что мне нужно в терминах сопоставления типов. Но он строит всю цепочку в памяти, пока не вернет результат. Я ищу аналог mapM
, который будет работать лениво, так что я могу использовать голову bs
, пока хвост все еще строится.