2013-12-13 5 views
5

Ist es möglich, die Schnittstelle eines geladenen Moduls in interaktiven OCaml zu sehen? Ich habe (erfolglos) versucht, nach einer solchen Möglichkeit zu suchen, und Online-Dokumente/Quellen sind nicht das, wonach ich suche.OCaml - wie man die Schnittstelle des Moduls sieht?

Antwort

6

Der Standardtrick dafür ist, ein Synonym für das Modul zu definieren, das die Toplevel zum Auflisten der Schnittstelle veranlasst.

$ ocaml 
     OCaml version 4.00.1 

# #load "str.cma";; 
# module S = Str;; 
module S : 
    sig 
    type regexp = Str.regexp 
    val regexp : string -> regexp 
    val regexp_case_fold : string -> regexp 
    val quote : string -> string 
    val regexp_string : string -> regexp 
    val regexp_string_case_fold : string -> regexp 
    val string_match : regexp -> string -> int -> bool 
    . . . 
    val first_chars : string -> int -> string 
    val last_chars : string -> int -> string 
    end 
+0

Awesome Idee, Schande über Ocaml für nicht möglich machen es auf nicht-hacky Weise. Vielen Dank! – mkf

+0

Ich denke, diese Funktion sollte von einer IDE für OCaml bereitgestellt werden, nicht vom OCaml-Compiler. Also keine Schande über OCaml :-) –

+0

Ich meinte die interaktive Konsole für OCaml :) die scheint, was Sie eine IDE nennen :) – mkf

1

In OCaml Toplevel-Version 4.04.0, der Trick eines Moduls Synonym für die Definition funktioniert nicht mehr:

# module L = List;; 
module L = List 
# 

aber die include Direktive verwenden:

# module L = struct include List end;; 
module L : 
    sig 
    val length : 'a list -> int 
    val cons : 'a -> 'a list -> 'a list 
    val hd : 'a list -> 'a 
    val tl : 'a list -> 'a list 
    val nth : 'a list -> int -> 'a 
    val rev : 'a list -> 'a list 
... 
    val sort_uniq : ('a -> 'a -> int) -> 'a list -> 'a list 
    val merge : ('a -> 'a -> int) -> 'a list -> 'a list -> 'a list 
    end 
# 
+1

können Sie direkt die # show-Anweisung verwenden: #show-Liste ;; – ghilesZ

3

Beide utop und ocaml Dolmetscher hinzugefügt die #show Direktive seit einem Moment. Es tut genau das, was Sie wollen, wie im folgenden Beispiel:

│ Welcome to utop version 1.19.3 (using OCaml version 4.04.0) │   
    └──────────────────────────────────────────────────────────────┘   

Type #utop_help for help about using utop. 

─(15:12:33)─< command 0 >──────────────────────────────────────{ counter: 0 }─ 
utop # #show List;; 
module List :                  
sig                    
    val length : 'a list -> int             
    val cons : 'a -> 'a list -> 'a list 
    val hd : 'a list -> 'a 
    ... 
    val fast_sort : ('a -> 'a -> int) -> 'a list -> 'a list 
    val sort_uniq : ('a -> 'a -> int) -> 'a list -> 'a list 
    val merge : ('a -> 'a -> int) -> 'a list -> 'a list -> 'a list 
end 

PS: Ich verwende 4,04 Version, aber ich weiß, dass es auch für 4,03 funktioniert> und vielleicht vor das auch..