2017-10-24 1 views
1

Ich habe zwei Module A.ml und B.ml wie so:utop ein Modul mit Abhängigkeiten in Loading

A.ml:

type t = int 
let from_int (i : int) : t = i 

B.ml:

open A 
let my_t : t = from_int 0 

Ich kann sie ganz gut kompilieren durch den Aufruf ocamlc A.ml B.ml aber ich habe keine Ahnung, wie Sie beide in utop laden, umzu verwenden 210 interaktiv. Mit:

  • utop -init B.ml ergibt Error: Reference to undefined global 'A'
  • utop gefolgt von #use "A.ml";; und #use "B.ml";; führt zu den gleichen Fehler
  • open A aus B.ml entfernt macht diese Doppel #use Arbeit aber ocamlc A.ml B.ml versagt jetzt auf B mit Error: Unbound type constructor t.
+1

'# use' für die direkte Aufnahme ist - eine Datei in die Toplevel als _module_ dump , du willst '# mod_use'. Es gibt auch ocamlmktop, das einen Toplevel mit einer Reihe von darin verknüpften Modulen erstellt. Und schließlich gibt es 'load', wie in Pierre's Antwort angegeben. – gsg

Antwort

3

Sie müssen zuerst a.ml kompilieren:

ocamlc -c a.ml // yields a.cmo 

in utop:

#load "a.cmo";; 
    #use "b.ml";; 
+0

Ich sehe. Es ist sogar möglich, diese in eine 'init.ml' zu werfen und' utop -init init.ml' zu verwenden, um diese Befehle nicht bei jedem Start von 'utop' aufzurufen. Vielen Dank! – gallais

Verwandte Themen