尽管Idris是依赖类型的,其中值可以在类型中自由使用,但它仍然区分函数id和函数式Identity。为什么不能在id上定义函数器实例 Functor id where
map = id id的类型是id : a -> a,为什么a不能和Type统一,这样map @{Functor id}就有了(a-> b) -> id a -> id b类型,也就是(a -> b) -> a -> b
对于足够多态的类型,参数性可以唯一地决定函数本身(详见 )。例如,类型为forall t. t -> t的唯一总函数是标识函数id。
有可能在Idris中陈述并证明这一点吗?(如果不能在Idris内部证明这一点,那是真的吗?)下面是我的尝试(我知道函数相等在Idris中不是一个基本概念,因此我断言,任何泛型类型的函数t -> t总是返回与标识函
刚开始在Idris (如果它重要的话是Idris 2),并偶然发现这个问题。我正在尝试实现一个函数,该函数返回所有Fibonacci数的向量,直到给定的n。我知道我需要向Idris证明fibs k的长度至少为2,但我无法理解如何做到这一点,以及为什么在现有定义中不明显。对我来说,看起来fibs (S k)中的fibs (S k)肯定是>= 1,因为否则fibs Z或fibs (S Z)都会匹配
我目前正在尝试下载和使用Idris for Atom,并使用它的编辑器。我从那里下载了Hackage,然后在我的计算机上安装了idris,然后在atom上安装了idris包,当我在程序中输入类似idris应该突出显示的内容时,但是当我输入检查时,我得到了两个错误:“无法找到idris可执行文件:无法在”Idris“和”idris编译器被关闭或崩溃
当我在声明上写private时,错误似乎消失了,所以我猜这些访问修饰符确实改变了解析的工作方式。然而,我不明白为什么会这样。 那么为什么会出现这个错误呢?如果我不把private放在前面,为什么解析器会认为in是一个关键字(我猜这是问题所在),而不是标识符的一部分?{a} {b} f = (x, y : a) -> x = y 我使用的是Idr