当类型被赋予名称时,自动隐式 arg 停止工作
Auto implicit arg stops working when type is given a name
在编写 时,我注意到虽然这按预期工作:
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
参数失败
Can't find a value of type
Divides 5 25
为什么 Idris 无法看穿 Divides
的定义?
我不确定是否是这个原因,但 modNat 并不完全。这将是绊倒伊德里斯的一个很好的理由。
divides : Nat -> Nat -> Nat
divides n k = n `modNat` k
onlyModBy5 : (n : Nat) -> {auto prf : n `divides` 5 = 0 } -> Nat
onlyModBy5 n = n
foo : Nat
foo = onlyModBy5 25
出于某种原因,这也已经失败了(只是从原始版本中间接了一次)。
在编写
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
参数失败
Can't find a value of type
Divides 5 25
为什么 Idris 无法看穿 Divides
的定义?
我不确定是否是这个原因,但 modNat 并不完全。这将是绊倒伊德里斯的一个很好的理由。
divides : Nat -> Nat -> Nat
divides n k = n `modNat` k
onlyModBy5 : (n : Nat) -> {auto prf : n `divides` 5 = 0 } -> Nat
onlyModBy5 n = n
foo : Nat
foo = onlyModBy5 25
出于某种原因,这也已经失败了(只是从原始版本中间接了一次)。