我很困惑。
module Experiment
import Data.Vect
p1: Elem 5 [3,4,5,6]
p1 = There (There Here)
v : Vect 4 Int
v = 3 :: 4 :: 5 :: 6 :: Nil
p2: Elem 5 v
p2 = There (There Here)
p2
的定义没有进行类型检查,而p1
的定义却没有。我使用的是Idris 0.10.2。有什么我想念的吗?
答案 0 :(得分:1)
类型声明中的小写名称被解释为隐式参数(如a
中的length : List a -> Nat
,实际上是length : {a : Type} -> List a -> Nat
)。要引用定义的Vect
,您可以使用大写名称或通过命名空间引用:
module Experiment
import Data.Vect
A : Vect 4 Int
A = 3 :: 4 :: 5 :: 6 :: Nil
p2: Elem 5 A
p2 = There (There Here)
a : Vect 4 Int
a = 3 :: 4 :: 5 :: 6 :: Nil
p3: Elem 5 Experiment.a
p3 = There (There Here)