我有一些类型:
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变量?
答案 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
类型的每个值都有Vide
或Ilist
作为其构造函数。这就是定义的含义。