2016-05-23 2 views
0

Я хотел бы использовать даты и время в своем коде, поэтому я загрузил Calendar Lib с помощью opam. У меня есть простой кусок кода, который демонстрирует проблему (example.ml):ocaml unbound constructor type error from type definition

open CalendarLib 

type datefun = date -> int 

let run_datefun (f : datefun) (d : date) = (f d) 

let() = 
    let mydate = make 2016 5 23 in 
    printf "Day of week = %i" run_datefun days_in_month mydate 

Насколько я могу видеть, метод Календарь Days_in_Month имеет тип подписи date -> int.

Когда я пытаюсь скомпилировать этот код (corebuild -pkg calendar example.byte) Я получаю следующее сообщение об ошибке:

File "example.ml", line 3, characters 15-19: 
Error: Unbound type constructor date 

, который кажется мне, как компилятор ищет конструктор Date для типа даты.

Что я делаю неправильно?

ответ

2

Функции и типы данных, которые вы хотели бы использовать это внутри Date module, так перефразировать ваш код, мы получаем (я также взял на себя смелость перезаписи выходной фразы и вставить недостающие скобки):

open CalendarLib 

type datefun = Date.t -> int 

let run_datefun (f : datefun) (d : Date.t) = (f d) 

let() = 
    let mydate = Date.make 2016 5 23 in 
    Printf.printf "# of days in current month = %i\n" (run_datefun Date.days_in_month mydate) 

небольшой тест (кстати, вам не нужно corebuild для этого):

$ ocamlbuild -pkg calendar example.ml example.byte 
Finished, 3 targets (3 cached) in 00:00:00. 

$ _build/calendar.byte 
# of days in current month = 31