red*_*h64 4 dependent-type idris
为什么不会出现以下类型的问题:
v1 : mod 3 2 = 1
v1 = Refl
Run Code Online (Sandbox Code Playgroud)
然而,这将很好地检查:
v2 : 3 - 2 = 1
v2 = Refl
Run Code Online (Sandbox Code Playgroud)
这是由于mod功能的偏倚(感谢@AntonTrunov澄清).它是多态的,默认数字常量是Integers.
Idris> :t mod
mod : Integral ty => ty -> ty -> ty
Idris> :t 3
3 : Integer
Idris> :t mod 3 2
mod 3 2 : Integer
Run Code Online (Sandbox Code Playgroud)
对于Integer类型mod功能不是全部.
而是使用modNatNZ功能,所以所有类型检查完美和工作.
v1 : modNatNZ 3 2 SIsNotZ = 1
v1 = Refl
Run Code Online (Sandbox Code Playgroud)