В Haskell Iteratee based I/O кажется очень привлекательным. Iteratees - это сложные, безопасные и быстрые способы ввода-вывода, основанные на функции "fold" a.k.a. "уменьшить" на функциональных языках. В принципе, если у вас есть обход, идея состоит в том, чтобы инкапсулировать состояние обхода в так называемый "перечислитель", который вызывает "итерацию", которая, в свою очередь, выполняет функцию, возвращающую значение или запрос на большее количество данных вместе с продолжением для перечислитель для вызова. Таким образом, только перечислитель знает состояние обхода, в то время как итератор знает, что делать с данными и выстраивает из него значения. Самое приятное в том, что итерации автоматически скомпонованы, когда вывод одного итератора подается на другой, чтобы сделать более крупным.
Итак, два вопроса:
- Означает ли понятие даже на других языках, например, на простых объектно-ориентированных языках, или это полезно только для преодоления недостатков Haskell lazy I/O?
- Существуют ли какие-либо фактические реализации для других языков, особенно С# (как это то, что использует моя компания)? (В поиске Google появляется одно упоминание об итерациях в Scala, ну, я не заинтересован в Scala прямо сейчас).