Почему в idris нет функции фильтрации Stream?

Есть filter : (a -> Bool) -> List a -> List a для списка, но нет filter : (a -> Bool) -> Stream a -> Stream a для стрима, почему?

Есть ли альтернативы для выполнения подобных работ?

1 ответ

Решение

Функции в Idris являются суммарными по умолчанию, и средство проверки целостности по праву откажется принять фильтр для потоков, что является несколько каноническим примером непродуктивного определения для типа с коиндуктивностью: что будет filter isEven вернуть применительно к потоку нечетных натс?

Проверьте продуктивное копрограммирование с помощью Guarded Recursion, где вы найдете тот же самый пример и хорошее введение в совокупность в контексте коиндуктивных типов.

Другие вопросы по тегам