2013-06-12 4 views
0

У меня есть несколько типов:объявить тип, который не имеет никаких аргументов

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 вместо плана.

Как я могу объявить переменную Ilist из списка itineraire?

ответ

1

Мне кажется, что вы только что упустили Ilist.

let myPlan = Ilist []; 

Каждое значение типа plan имеет либо Vide или Ilist как конструктор. Вот что означает определение.

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?

+0

На самом деле я бы не хотел, но у меня есть файл подписи, чтобы уважать ... –

Смежные вопросы