W a.ml jest zdefiniowany typ rekordu t, który jest również zdefiniowany jako przezroczysty w a.mli, tzn. W interfejsie d tak, że definicja typu jest dostępny dla wszystkich pozostałych plików.jak uzyskać dostęp do typu zdefiniowanego w jednym pliku .ml w innym pliku .ml
a.ml ma również funkcję, func, która zwraca listę t.
Teraz w innym pliku, b.ml I m wywoływania func, teraz oczywiście ocaml kompilator wud nt móc wywnioskować typ D obiektów przechowywanych w wykazie D dla kompilatora jej tylko listę. tak w b.ml, HAV coś podobnego dis,
let tlist = A.func in
let vart = List.hd tlist in
printf "%s\n" vart.name (*name is a field in record t*)
Teraz tu pojawia się błąd kompilatora mówię „Bez ograniczeń wytwórni dziedzinie imię”, które ma sens jak kompilator nie można wywnioskować typ D z vårt.
moje pierwsze pytanie: w jaki sposób mogę jawnie podać typ VART jako t tutaj? Próbowałem robić "let vart: A.t =", ale otrzymałem błąd o wartości .
Próbowałem także utworzyć inną funkcję, aby pobrać pierwszy element z listy d i wspomnieć o typie powrotu jako A.t, ale potem otrzymałem "Niezwiązaną wartość A.t". Zrobiłem to:
let firstt = function
[] -> 0
| x :: _ -> A.t x ;;
Problemem jest kompilator jest w stanie rozpoznać A.t (typ A) w b.ml ale jest w stanie rozpoznać funkcję A.func. Jeśli usuniemy plik A.t z pliku b.ml , nie zgłaszam żadnych błędów kompilatora.