【发布时间】:2017-10-02 15:06:16
【问题描述】:
例如,Agda 允许我这样写:
open import Data.Vec
open import Data.Nat
myVec : Vec ℕ _
myVec = 0 ∷ 1 ∷ 2 ∷ 3 ∷ []
并且myVec 将具有预期的Vec ℕ 4 类型。
但如果我在 Idris 中尝试同样的方法:
import Data.Vect
myVec : Vect _ Nat
myVec = [0, 1, 2, 3]
我从类型检查器收到一条错误消息:
When checking right hand side of myVec with expected type
Vect len Nat
Type mismatch between
Vect 4 Nat (Type of [0, 1, 2, 3])
and
Vect len Nat (Expected type)
Specifically:
Type mismatch between
4
and
len
有没有办法在 Idris 中定义 myVec 而无需手动指定 Vect 的索引?
【问题讨论】:
-
如果我像这样在
_的位置添加一个洞:myVec : Vect ?len Nat; myVec = [0, 1, 2, 3],那么 Idris 能够解决这个洞?len(Emacs 中的C-c C-a)。不过,这可能不是您想要的。 -
IIRC,Idris 在类型级别将
_视为一个全新的通用量化变量。 IE。你的表达会变成myVec : forall len. Vect len Nat。
标签: type-inference agda idris