Читаю Сейджвика @ он пишет - "во многих языках итераторы добавлены как очень важная first-class парадигма" @ у меня бомбит от осознания что в хачкелле эта хуйня работает без специльного синтаксиса и говна @ пукан остывает, остается ощущение высоких абстракций и не обдумывание узконаправленного говна

@ndtimofeev Интерфейс ленивого списка изоморфен (имеет идентичную структуру) интерфейсам итераторов. // с точностью до языковых особенностей конкретного итератора; то есть если It1 бросает исключение
StopIterationв-тех-же-и-только-тех ситуациях, где It2 возвращает False на.hasNext()-- то It1 и It2 не рассматриваются как разные интерфейсы.Контракт следующий. Консьюмер итератора
it :: [V]запрашивает следующий итемx :: Vпутем патерн-матчинга поit. В ответ на этоits продюсер вычисляет факт наличия следующего итема и в положительном сценарии сам итемx :: Vлибо рецепт его вычисления (зависимо от ленивостиV). Консьюмер получает факт наличия/отсутствия следующего итема как уже данное предположение в case-альтернативах. ЗначениеNilозначает конец итерации. Значение Cons дает следующий итемx :: Vи новое значение итератораit' :: [V].Звучит тривиально и по-капитански, ровно потому что это изоморфизм. Интерфейс ленивого списка и интерфейс Итератор идентичны по своей структуре.