В Haskell Iteratee-based I / O кажется очень привлекательным. Итеративы - это составные, безопасные и быстрые способы выполнения операций ввода-вывода, вдохновленные функцией «сворачивания», известной как «сокращение» в функциональных языках. По сути, если у вас есть обход, идея состоит в том, чтобы инкапсулировать состояние обхода в так называемый «перечислитель», который вызывает «итерацию», которая, в свою очередь, является функцией, возвращающей значение или запрос дополнительных данных вместе с продолжением для перечислитель для вызова. Таким образом, только перечислитель знает состояние обхода, в то время как итератор знает, что делать с данными, и строит на их основе значения. Самое приятное в этом то, что итераторы автоматически компонуются, когда вывод одного итератора передается другому, чтобы сделать больший.
Итак, два вопроса: