2013-12-13 75 views

回答

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 
+0

真棒的想法,在ocaml的羞辱,因为它不可能以非hacky的方式。谢谢! – mkf

+0

我认为这个特性应该由OCaml的IDE提供,而不是由OCaml编译器提供。所以没有耻辱OCaml :-) –

+0

我的意思是交互式控制台为OCaml :)这似乎是你所说的IDE :) – mkf

1

在OCaml的顶层版本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 
# 
+1

你可以直接使用#show指令:#show List ;; – ghilesZ

3

两个utop and ocaml interpreters added the #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>和之前也许太。