2014-03-03 88 views
3

請:我想檢查模塊的簽名;有沒有這樣做的功能?只是輸入模塊的名稱不起作用:如何檢查ocaml頂層的模塊/簽名?

# List ;; 
Error: Unbound constructor List 

事實上,我想爲我在交互式頂層定義的模塊做到這一點。

對不起,如果答案很明顯 - 很難搜索到這個!謝謝。

回答

8

標準的伎倆,這是做一個新的模塊同義詞:

# module Mylist = List;; 
module Mylist : 
    sig 
    val length : 'a list -> int 
    val hd : 'a list -> 'a 
    val tl : 'a list -> 'a list 
    . . . 
    val sort : ('a -> 'a -> int) -> 'a list -> 'a list 
    val stable_sort : ('a -> 'a -> int) -> 'a list -> 'a list 
    val fast_sort : ('a -> 'a -> int) -> 'a list -> 'a list 
    val merge : ('a -> 'a -> int) -> 'a list -> 'a list -> 'a list 
    end 
# 

更新

由於ocaml的4.02這一招不再有效。取而代之的是爲目的的頂層指令:

# #show_module List;; 
module List : 
    sig 
    val length : 'a list -> int 
    val hd : 'a list -> 'a 
    val tl : 'a list -> 'a list 
    . . . 
    val sort : ('a -> 'a -> int) -> 'a list -> 'a list 
    val stable_sort : ('a -> 'a -> int) -> 'a list -> 'a list 
    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 

+0

它曾經是得到這個信息的唯一方法。自OCaml 4.02.0以來,事情是不同的(也是更好的)。 –

+0

(我更新了我的答案。) –

4

在OCaml的版本> = 4.02,你現在也可以做到這一點的交互式解釋:

# #show_module List;; 
module List : 
    sig 
    val length : 'a list -> int 
    ... 
    end 

或者只是使用#show List;;