在写这个答案时,我注意到虽然这可以按预期工作:
onlyModBy5 : (n : Nat) -> {auto prf : n `modNat` 5 = 0} -> Nat
onlyModBy5 n = n
foo : Nat
foo = onlyModBy5 25
但是一旦我给该属性起一个名字,它就会停止工作:
Divides : Nat -> Nat -> Type
Divides n k = k `modNat` n = 0
onlyModBy5 : (n : Nat) -> {auto prf : 5 `Divides` n} -> Nat
onlyModBy5 n = n
foo : Nat
foo = onlyModBy5 25
现在填充auto
arg 失败
Can't find a value of type
Divides 5 25
为什么伊德里斯看不透Divides
的定义?