声明一个没有参数的类型

时间:2013-06-12 14:40:30

标签: 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 list

我可以声明客户端和itineraires,因为我只需要指定参数。 但是我不知道如何将变量声明为类型计划。

类型计划仅包含一个itineraire列表,但正在执行:

let myPlan = [(an itineraire here)];;

返回一个itineraire列表而不是一个计划。

那么如何声明itineraire列表的Ilist变量?

2 个答案:

答案 0 :(得分:2)

您应该使用IList构造函数,它将itineraire list作为参数,如类型声明中所示,并返回plan

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)
PS:你真的需要区分这个案例吗?你不能简单地将计划定义为列表,并使用空列表而不是Vide

答案 1 :(得分:1)

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

let myPlan = Ilist [];

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