Types 声明一个没有参数的类型

Types 声明一个没有参数的类型,types,ocaml,declaration,Types,Ocaml,Declaration,我有一些类型: type client = {nom : nom_client; demande : demande_client} type itineraire = {num : num_itineraire; capacite : capacite_itineraire; liste_clients : client list} type plan = Vide | Ilist of itineraire

我有一些类型:

type client =  {nom : nom_client; demande : demande_client}

type itineraire = {num : num_itineraire; 
                   capacite : capacite_itineraire; 
                   liste_clients : client list}

type plan = Vide | Ilist of itineraire list
我可以声明客户机和行程,因为我只需要指定参数。 但是,我不知道如何将变量声明为plan类型

类型计划仅包含行程列表,但执行以下操作:

let myPlan = [(an itineraire here)];;
返回行程列表而不是计划


那么如何声明行程列表的Ilist变量呢?

在我看来,您刚刚遗漏了
Ilist

let myPlan = Ilist [];

plan
类型的每个值都有
Vide
Ilist
作为其构造函数。这就是定义的含义。

在我看来,您刚刚遗漏了Ilist

let myPlan = Ilist [];

plan
类型的每个值都有
Vide
Ilist
作为其构造函数。这就是定义的含义。

您应该使用
IList
构造函数,它将
行程列表
作为类型声明中指示的参数,并返回
计划

let my_plan = IList [foo; bar; baz]
请注意,要获得与计划对应的列表,还需要在此构造函数上进行模式匹配

let merge_plans p1 p2 = match p1, p2 with
  | p, Vide | Vide, p -> p
  | IList l1, IList l2 -> IList (l1 @ l2)

附言:你真的需要区分这种情况吗?您不能简单地将计划定义为列表,并使用空列表而不是
Vide

您应该使用
IList
构造函数,该构造函数将
行程列表
作为类型声明中指示的参数,并返回
计划

let my_plan = IList [foo; bar; baz]
请注意,要获得与计划对应的列表,还需要在此构造函数上进行模式匹配

let merge_plans p1 p2 = match p1, p2 with
  | p, Vide | Vide, p -> p
  | IList l1, IList l2 -> IList (l1 @ l2)
附言:你真的需要区分这种情况吗?您不能简单地将计划定义为列表,并使用空列表代替
查看