Types 如何理解idrislang中List和Vect的类型声明和定义?
其中有以下几行:Types 如何理解idrislang中List和Vect的类型声明和定义?,types,programming-languages,idris,dependent-type,Types,Programming Languages,Idris,Dependent Type,其中有以下几行: data List a = Nil | (::) a (List a) data Vect : Nat -> Type -> Type where Nil : Vect Z a (::) : a -> Vect k a -> Vect (S k) a 我假设第1行是List的类型定义,其余的是Vect的类型声明。 我认为应该有声明和定义,所以我查看了 data List : (elem : Type) -> Type where
data List a = Nil | (::) a (List a)
data Vect : Nat -> Type -> Type where
Nil : Vect Z a
(::) : a -> Vect k a -> Vect (S k) a
我假设第1行是List的类型定义,其余的是Vect的类型声明。
我认为应该有声明和定义,所以我查看了
data List : (elem : Type) -> Type where
Nil : List elem
(::) : (x : elem) -> (xs : List elem) -> List elem
它与Vect的类型声明具有相似的模式,因此看起来很好。但是我在源代码中找不到数据列表a=Nil(::)a(列表a)
。此外,我找不到Vect的类型定义
因此,我的困惑是:
- 为什么在源代码中找不到
数据列表a=Nil(::)a(列表a)
- Vect的实际类型定义是什么
Vect
示例中,值类型为Nat
,值类型为type
)
GADT是由Haskell介绍的,阅读或搜索GADT可以为您提供关于第二种风格的更多解释
List
的GADT风格定义等同于数据列表a=…
一,除了允许命名elem
、x
和xs
为什么投票失败?