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

use*_*878 3 ocaml

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

# List ;;
Error: Unbound constructor List
Run Code Online (Sandbox Code Playgroud)

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

对不起,如果答案很明显 - 很难搜索到这个!谢谢.

Jef*_*eld 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
# 
Run Code Online (Sandbox Code Playgroud)

更新

从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
Run Code Online (Sandbox Code Playgroud)


dub*_*jim 5

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

# #show_module List;;
module List :
  sig
    val length : 'a list -> int
    ...
  end
Run Code Online (Sandbox Code Playgroud)

或者只是使用 #show List;;