2012-03-19 9 views
6

Dire che ho un file di libreria OCaml foo.cma. C'è uno strumento da riga di comando per stampare la firma delle funzioni e altri tipi definiti lì? L'utilità ocamlbrowser sembra essere basata su Windows (si lamenta della variabile d'ambiente $ DISPLAY). Il caso d'uso è che io sto facendo un:esamina la firma della libreria (.cma) dalla console

ocamlc -c foo.cma main.ml 

e ottengo:

File "main.ml", line 13, characters 33-47: 
Error: Unbound value ListUtil.split 

ListUtil.split dovrebbe risiedere in foo.cma, ma non so di uno strumento basato su console per verificare esso.

risposta

9

Su Debian/Ubuntu, si hanno "ocamlobjinfo":

ocamlobjinfo stdlib.cma 

visualizzerà tutti i nomi delle unità incluse nella stdlib.cma. Quindi, è possibile creare un file breve:

include SomeModule 

e compilarlo con -i per vedere quello che viene definito nel modulo QualcheModulo.

5

Nel primo livello, mi basta caricare il file CMA:

#load "foo.cma";; 

Poi ho ri-definito un modulo solo per vedere la firma:

module Chunk = Foo;; 
+0

Sì, è utile, tuttavia presuppone che si conoscano i nomi dei moduli compilati insieme nel file cma. Ad esempio, se ho un file foo.cma con due moduli separati, ad esempio foo1 e foo2, compilato come: 'ocamlc -a foo1.cmo foo2.cmo -o foo.cma' allora c'è un modo per ottenere un file elenco di tutti i moduli trovati nel file .cma o si deve sapere in anticipo i nomi? Sembra strano, in ogni caso, che l'utilità della console non sia fornita immediatamente. –

+0

Con il metodo toplevel, puoi vedere tutti i moduli nel file cma. Per conoscere il modulo in anticipo, è necessario archiviare il file mli o, in caso contrario, nel file sorgente. Altrimenti, non so davvero come farlo. – cago

Problemi correlati