2013-12-13 7 views
5

インタラクティブなOCamlでロードされたモジュールのインタフェースを見ることはできますか?私はそのような可能性を探そうとした(失敗した)と、オンラインのドキュメント/ソースは私が探しているものではありません。OCaml - モジュールのインターフェイスを見る方法?

答えて

6

このための標準的なやり方は、モジュールのシノニムを定義することです。これは、トップレベルにインターフェイスを一覧表示するよう誘導します。 OCamlのトップレベルのバージョン4.04.0では

$ 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

ocamlに恥ずかしいアイデアは、非ハックな方法でそれを可能にしないためです。ありがとうございました! – mkf

+0

この機能は、OCamlコンパイラではなく、OCaml用のIDEによって提供されるべきだと思います。 –

+0

そうすることを騙す方法が見つからない限り、 – mkf

1

、モジュールの同義語を定義するのトリックはもう機能しません:

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

いますが、includeディレクティブを使用することができます

# 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

あなたは#showディレクティブを直接使うことができる:#show List ;; – ghilesZ

3

両方をutopocamlインタプリタが追加されました#show指示が瞬間からあります。あまりにも私は4.04バージョンを使用していますが、私は、それはまた、4.03のために働くことを知っている>と多分その前に:。

│ 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:それは、次の例のように、正確に何をしたいん。

関連する問題