Я, вероятно, не очень хорошо разбираюсь в монаде IO.Haskell IO Monad и использование памяти
Если я пишу приложение, которое, как ожидается, будет работать в течение многих месяцев, тем временем выполнив его ход, будет ли модем IO хранить всю информацию журнала в ОЗУ до конца?
Из блога на IO Inside, модели Haskell мире как
main :: RealWorld -> ((), RealWorld)
так, что IO не происходит во время выполнения Haskell части кода, но только тогда, когда приложение возвращает из main
.
Возможно, я полностью неверно истолковал это. Может ли кто-нибудь объяснить , когда Haskell на самом деле делает IO?
Спасибо за приятное объяснение. Я прочитал «Learn You a Haskell» (в настоящее время во втором чтении раздела монады) и начал «Real-World Haskell». Если я не пропустил что-то, ничто не дает понять, что ИО происходит немедленно, но, как и другие монады, «накапливается» до конца.Думаю, мне нужно посмотреть на выходе ассемблера компилятора, чтобы убедить себя :-). – Ralph
. Метафора «RealWorld -> ((), RealWorld), несомненно, подразумевает, что преобразование происходит в чистом виде и полностью испускается только в конце. Я полагаю, что базовые реализации операций ввода-вывода фактически выполняются «по требованию». – Ralph
@ Ralph: Ключом к пониманию монады IO является то, что он накапливает * программы *, а не фактический ввод и вывод. Немногие учебники Haskell объясняют это хорошо. –