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

时间:2017-04-24 14:38:34

标签: functional-programming idris codata

列表有filter : (a -> Bool) -> List a -> List a,但Stream没有filter : (a -> Bool) -> Stream a -> Stream a,为什么?

是否有其他类似工作的替代方案?

1 个答案:

答案 0 :(得分:12)

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

检查Productive Coprogramming with Guarded Recursion,你会在这里找到同样的例子,并在共同类型的背景下找到一个很好的总体介绍。