为什么在idris中没有Stream的过滤功能?

luo*_*990 13 functional-programming idris codata

filter : (a -> Bool) -> List a -> List aList,但是没有filter : (a -> Bool) -> Stream a -> Stream aStream,为什么?

是否有一些替代方案可以完成类似的工作?

Edu*_*bes 12

默认情况下,Idris中的函数是完全的,并且整体检查器将正确地拒绝接受流上的过滤器,这是对于共同类型的非生产性定义的一个典型示例:当应用于奇数nat流时会filter isEven 返回什么?

使用Guarded Recursion检查Productive Coprogramming,在这里您可以找到相同的示例,并在coinductive类型的上下文中找到一个很好的介绍.

  • 并参考 Bertot [本文](https://link.springer.com/chapter/10.1007%2F11417170_9)对流上类似过滤器的函数进行了高效定义. (3认同)