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澄清).它是多态的,默认数字常量是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
Run Code Online (Sandbox Code Playgroud)
对于Integer
类型mod
功能不是全部.
而是使用modNatNZ
功能,所以所有类型检查完美和工作.
v1 : modNatNZ 3 2 SIsNotZ = 1
v1 = Refl
Run Code Online (Sandbox Code Playgroud)