В a.ml тип записи t определен, а также определен прозрачно
в a.mli, то есть в интерфейсе d, так что определение типа доступно
ко всем остальным файлам.
a.ml также имеет функцию func, которая возвращает список t.
Теперь в другом файле, b.ml я называю func, теперь, очевидно, ocaml
компилятор не сможет вывести d-тип объектов, хранящихся в d-списке,
для компилятора это просто список. так что в b.ml у меня есть что-то вроде dis,
let tlist = A.func in
let vart = List.hd tlist in
printf "%s\n" vart.name (*name is a field in record t*)
Теперь здесь я получаю сообщение об ошибке компилятора, указывающее на «несвязанную метку поля записи».
name ", что имеет смысл, так как компилятор не может вывести тип d vart.
мой первый вопрос: как я могу явно указать тип d vart как t
Вот?
я пытался сделать "let vart: A.t =", но получил
та же ошибка.
Я также пытался создать другую функцию для извлечения первого элемента d
список и упоминание типа возврата как A.t, но затем я получил «Unbound
значение A.t ". Я сделал это:
let firstt = function
[] -> 0
| x :: _ -> A.t x ;;
Проблема в том, что компилятор не может распознать A.t (тип) в b.ml
но умеет распознавать функцию A.func. Если я удалю A.t из
b.ml, я не получаю никаких ошибок компилятора.