En a.ml se define un tipo de registro t y también se define de forma transparente en a.mli, es decir, en la interfaz d para que la definición de tipo sea disponible a todos los demás archivos.cómo acceder a un tipo definido en un archivo .ml en otro archivo .ml
a.ml también tiene una función, func, que devuelve una lista de t.
Ahora en otro archivo, b.ml i M llamando func, ahora, obviamente, ocaml compilador nt wud ser capaz de inferir el tipo d de los objetos almacenados en la lista D, para compilador es sólo una lista. por lo que en b.ml, i haber algo así como dis,
let tlist = A.func in
let vart = List.hd tlist in
printf "%s\n" vart.name (*name is a field in record t*)
Ahora aquí me sale un error de compilación diciendo "registro consolidar etiqueta de campo nombre", que tiene sentido ya que el compilador no puede deducir el tipo de vart d.
mi primera pregunta: ¿cómo proporciono explícitamente d tipo de vart como t aquí? intenté hacer "let vart: A.t =" pero obtuve el mismo error .
También intenté crear otra función para buscar el primer elemento de la lista d y mencionar el tipo de devolución como A.t, pero luego obtuve el valor "Unbound A.t". Hice esto:
let firstt = function
[] -> 0
| x :: _ -> A.t x ;;
El problema es compilador es incapaz de reconocer A.t (un tipo) en b.ml pero es capaz de reconocer la función A.func. Si elimino A.t del b.ml, no obtengo ningún error de compilación.