请:我想检查模块的签名; 有这个功能吗?只输入模块的名称不起作用:
# List ;;
Error: Unbound constructor List
Run Code Online (Sandbox Code Playgroud)
事实上,我想为我在交互式顶层定义的模块执行此操作.
对不起,如果答案很明显 - 很难搜索到这个!谢谢.
标准技巧是创建一个新的模块同义词:
# 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)
在 OCaml 版本 >= 4.02 中,您现在也可以在交互式解释器中执行此操作:
# #show_module List;;
module List :
sig
val length : 'a list -> int
...
end
Run Code Online (Sandbox Code Playgroud)
或者只是使用 #show List;;