OCaml - 如何查看模块的界面?

时间:2013-12-13 22:40:59

标签: module ocaml

是否可以在交互式OCaml中看到已加载模块的界面?我(尝试不成功)试图寻找这种可能性,而在线文档/来源并不是我想要的。

3 个答案:

答案 0 :(得分:6)

标准技巧是定义模块的同义词,这会导致顶层列出接口。

$ 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

答案 1 :(得分:4)

utop ocaml 解释器从那时起添加了 #show 指令。它完全符合您的要求,如下例所示:

    │ 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:我使用4.04版本,但我知道它也可用于4.03。&gt;也许在此之前。

答案 2 :(得分:1)

在OCaml toplevel版本4.04.0中,定义模块的同义词的技巧不再起作用:

# 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
#