如何在ocaml顶层检查模块/签名?
请:我想检查一个模块的签名;是否有一个函数可以执行此操作?仅键入模块名称不起作用:如何在ocaml顶层检查模块/签名?,ocaml,Ocaml,请:我想检查一个模块的签名;是否有一个函数可以执行此操作?仅键入模块名称不起作用: # List ;; Error: Unbound constructor List 事实上,我想对我在交互顶层定义的模块执行此操作 抱歉,如果答案是显而易见的-很难搜索到这个!谢谢。这方面的标准技巧是创建一个新模块同义词: # module Mylist = List;; module Mylist : sig val length : 'a list -> int val hd :
# List ;;
Error: Unbound constructor List
事实上,我想对我在交互顶层定义的模块执行此操作
抱歉,如果答案是显而易见的-很难搜索到这个!谢谢。这方面的标准技巧是创建一个新模块同义词:
# 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
#
更新
由于OCAML4.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
在OCaml版本>=4.02中,您现在也可以在交互式解释器中执行此操作:
# #show_module List;;
module List :
sig
val length : 'a list -> int
...
end
或者只使用
#show List代码>这曾经是获取此信息的唯一方法。自OCAML4.02.0以来,情况有所不同(而且更好)。