如何检查ocaml顶级的模块/签名?

时间:2014-03-03 17:23:37

标签: ocaml

请:我想检查模块的签名;有这个功能吗?只输入模块名称不起作用:

# List ;;
Error: Unbound constructor List

事实上,我想为我在交互式顶层定义的模块执行此操作。

很抱歉,如果答案很明显 - 很难搜索到这个!感谢。

2 个答案:

答案 0 :(得分:9)

标准技巧是创建一个新的模块同义词:

# 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

答案 1 :(得分:4)

在OCaml版本&gt; = 4.02中,您现在也可以在交互式解释器中执行此操作:

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

或者只使用#show List;;