Почему в idris нет функции фильтрации Stream?
Есть filter : (a -> Bool) -> List a -> List a
для списка, но нет filter : (a -> Bool) -> Stream a -> Stream a
для стрима, почему?
Есть ли альтернативы для выполнения подобных работ?
1 ответ
Решение
Функции в Idris являются суммарными по умолчанию, и средство проверки целостности по праву откажется принять фильтр для потоков, что является несколько каноническим примером непродуктивного определения для типа с коиндуктивностью: что будет filter isEven
вернуть применительно к потоку нечетных натс?
Проверьте продуктивное копрограммирование с помощью Guarded Recursion, где вы найдете тот же самый пример и хорошее введение в совокупность в контексте коиндуктивных типов.