为什么不涉及" mod"在伊德里斯没有做出类似的检查?

时间:2017-06-21 09:47:54

标签: dependent-type idris

为什么赢得以下类型检查:

v1 : mod 3 2 = 1
v1 = Refl

然而,这将很好地解决问题:

v2 : 3 - 2 = 1
v2 = Refl

1 个答案:

答案 0 :(得分:5)

这是由于mod功能的偏倚(感谢@AntonTrunov澄清)。它是多态的,默认数字常量是Integer s。

Idris> :t mod
mod : Integral ty => ty -> ty -> ty
Idris> :t 3
3 : Integer
Idris> :t mod 3 2
mod 3 2 : Integer

对于Integer类型mod,函数不是完全的。

而是使用modNatNZ函数,因此所有类型都可以完美地检查并运行。

v1 : modNatNZ 3 2 SIsNotZ = 1
v1 = Refl