Предположим, я получаю большой список элементов во время работы с 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, пока хвост все еще строится.