我正在学习伊德里斯,作为一项个人练习,我想实现一个由所有素数组成的Primes类型。 idris中有一种方法来定义一个从类型和属性开始的新类型,它将选择属性为true的所有启动类型的元素?在我的情况下,有没有办法将Primes定义为Nat这样的集合,使得n <= p and n|p => n=1 or n=p? 如果这是不可能的,我应该使用某种筛子定义素数来构建它们吗?
在下面的代码 Idris> :t \x => x + x
\x => x + x : Integer -> Integer
伊德里斯导出一个整数类型的X变量,其中我认为它应该得到像在Haskell接口不限于: Haskell> :t (\x y -> x + y)
(\x y -> x + y) :: Num a => a -> a -> a
然后它甚至不像一个Integer,接受Do
在Idris Tutorial中,用于过滤矢量的函数是基于相关对的。 filter : (a -> Bool) -> Vect n a -> (p ** Vect p a)
filter f [] = (_ ** [])
filter f (x :: xs) with (filter f xs)
| (_ ** xs') = if (f x) then (_ ** x :: xs')
我想要一个find函数用于大小有界类型的流,类似于列表和查找函数。 total
find : MaxBound a => (a -> Bool) -> Stream a -> Maybe a
的挑战是它,使其: 是总 消耗不超过 恒定 log_2Ñ空间,其中N是编码最大a所需的比特的数量。 时间不超过一分钟,以检查在编译时 没有征收成本运行 通常对于流的总能找得到实现听起来荒谬。流是无限的,