请参阅复杂OCaml代码中的推断类型

时间:2011-05-12 16:58:35

标签: types ocaml type-inference

我是一个OCaml新手,正在处理一些非常复杂的(至少对我来说)我没写过的OCaml代码。如果我能看到某些值的推断类型,那么理解它会有很多帮助,因为我可以通过将鼠标悬停在任何值上来使用F#和Visual Studio,例如:

F# showing inferred type

(从http://theburningmonk.com/2010/01/learning-f-part-1/借来的截图)

我想我可以分解代码并将其提供给顶层以获取类型,但还有其他更简单的方法吗?

4 个答案:

答案 0 :(得分:8)

首先,您必须使用foo.ml标记编译文件(-annot)。这将生成注释文件(foo.annot),其中包含有关内部所有标识符的类型信息。您可以将其作为makefile或构建过程的一部分包含在内。

然后,您需要依靠IDE来显示该信息。我在图阿雷格(emacs模式)中使用 Ctrl + C Ctrl + T 执行此操作,突出显示当前表达式并显示其类型。

答案 1 :(得分:7)

OcaIDE这是Eclipse的O'Caml插件,可以在编辑代码时动态显示推断类型。

示例:

enter image description here

答案 2 :(得分:1)

您可以将代码输入ocaml toplevel。是的,它不是很漂亮,但它会显示出类型。

答案 3 :(得分:1)

在阅读OCaml代码时,对我来说有用的是从.mli文件开始,看看项目的整体结构是什么。从那里开始,了解什么是依赖关系,你可以从顶层探索。

或者,您可以ocamlc -i相关文件以获取所有声明的类型和值的概述,或者在Emacs中使用Tuareg模式作为其他地方的回复,如果您有这种说服力的话。