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

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

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

Ответ 1

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

Проверьте Производственное копирование с охраняемой рекурсией, где вы найдете этот самый пример и приятное введение в совокупность в контексте коиндуктивных типов.