【问题标题】:See inferred types in complex OCaml code查看复杂 OCaml 代码中的推断类型
【发布时间】:2011-08-24 07:24:30
【问题描述】:

我是一名 OCaml 新手,正在使用一些我没有编写的非常复杂的(至少对我而言)OCaml 代码。如果我可以看到某些值的推断类型,这将有助于理解它,就像我可以通过将鼠标悬停在任何值上来使用 F# 和 Visual Studio 一样,例如:

(截图借自http://theburningmonk.com/2010/01/learning-f-part-1/

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

【问题讨论】:

    标签: types ocaml type-inference


    【解决方案1】:

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

    或者,您可以ocamlc -i 相关文件以了解所有声明的类型和值的概述,或者如果您有这种说服力,可以使用 Emacs 中的 Tuareg 模式,如其他地方所回答的那样。

    【讨论】:

      【解决方案2】:

      OcaIDE 是一个用于 Eclipse 的 O'Caml 插件,在编辑代码时动态显示推断的类型。

      例子:

      【讨论】:

        【解决方案3】:

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

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

        【讨论】:

        • 您也可以查看github.com/avsm/ocaml-annot 以获得简单的命令行工具。
        • ocaml-spotter 扩展了 -annot 进一步,jun.furuse.info/hacks/ocamlspotter
        • 带有 ocaml ftplugin 的 vim 的键序列是 <LocalLeader>t(通常是 ,t
        • @ygrek:为什么不添加 ftplugin 作为另一个答案?
        • 真正的答案是生成 .annot 文件,编辑器只是在使用它们
        【解决方案4】:

        您可以将代码输入到 ocaml 顶层。是的,它不是那么漂亮,但它会显示类型。

        【讨论】:

        • 是的,我知道我可以做到这一点,但这是相当复杂的代码,将代码分解到我想要查看的类型会非常耗时。
        • Toplevel + rlwrap 非常有用,如果有办法save it...
        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2021-06-23
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多