2012-03-19 13 views
6

Powiedz, że mam plik biblioteki OCaml foo.cma. Czy istnieje narzędzie wiersza poleceń do drukowania podpisu funkcji i innych typów tam zdefiniowanych? Narzędzie ocamlbrowser wydaje się być oparte na systemie Windows (narzeka na zmienną środowiskową $ DISPLAY). Sprawa jest taka, że ​​stosowanie Robię:sprawdź sygnaturę biblioteki (.cma) z konsoli

ocamlc -c foo.cma main.ml 

i otrzymujemy:

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

ListUtil.split powinien przebywać w foo.cma ale nie wiem narzędzie do konsoli opartej na weryfikacji to.

Odpowiedz

9

Na Debian/Ubuntu, trzeba "ocamlobjinfo":

ocamlobjinfo stdlib.cma 

wyświetli wszystkie nazwy jednostkowe zawarte w stdlib.cma. Następnie możesz utworzyć krótki plik:

include SomeModule 

i skompilować go z -i, aby zobaczyć, co jest zdefiniowane w module SomeModule.

5

W Toplevel, po prostu załadować plik CMA:

#load "foo.cma";; 

Potem ponownie zdefiniowany moduł po prostu zobaczyć podpisem:

module Chunk = Foo;; 
+0

Tak, to jest przydatne, ale zakłada, że ​​zna się nazwy modułów zestawionych razem w pliku cma. Na przykład, jeśli mam plik foo.cma z dwoma oddzielnymi modułami, powiedzmy foo1 i foo2, skompilowanymi w następujący sposób: 'ocamlc -a foo1.cmo foo2.cmo -o foo.cma', czy istnieje sposób na uzyskanie lista wszystkich modułów znajdujących się w pliku .cma lub czy trzeba wcześniej znać nazwy? Wydaje się dziwne w każdym przypadku, że narzędzie konsoli nie jest dostarczane z pudełka. –

+0

Za pomocą metody toplevel można wyświetlić wszystkie moduły w pliku cma. Aby poznać moduł z góry, musisz sprawdzić w pliku mli lub, jeśli nie ma, w pliku źródłowym. W przeciwnym razie nie wiem, jak to zrobić. – cago