创建零长度向量

时间:2017-07-20 07:18:21

标签: idris

给定矢量的这种类型,创建特定类型项目的零长度矢量的方法是什么?

data Vect : Nat -> Type -> Type where
  VectNil : Vect 0 ty
  (::) : ty -> Vect size ty -> Vect (S size) ty

VectNil字符串以及我在REPL中尝试的所有变体都失败了。 期望 VectNil 像C#中通用List的默认构造函数那样工作是不正确的?

new List<string> (); // creates a zero length List of string

1 个答案:

答案 0 :(得分:3)

VecNil是值构造函数,它接受implicit类型参数。在这里你可以在REPL中看到它:

*x> :set showimplicits 
*x> :t VectNil 
 Main.VectNil : {ty : Type} -> Main.Vect 0 ty

Idris从上下文中推断出这些隐含参数的值。但有时上下文没有足够的信息:

*x> VectNil
(input):Can't infer argument ty to Main.VectNil

您可以使用大括号显式提供隐式参数的值:

*x> VectNil {ty=String}
Main.VectNil {ty = String} : Main.Vect 0 String

use the the operator添加类型注释:

*x> the (Vect 0 String) VectNil 
Main.VectNil  : Main.Vect 0 String

在较大的程序中,Idris能够根据其使用地点推断出类型。