我想知道,在 Ocaml 中,是否有部分输入信息。对于无法编译的程序,可以通过顶层/编译器的一些现有功能绘制吗?让我解释。
在 Ocaml 中,众所周知,推断类型可以通过 -annot 文件检索。但是,有时我们有一段代码由于某些输入错误而无法编译。它给出了一个导出到顶层的错误,这种模式
"This expression has type A, but was expected type B"
一个人为的例子是
# let x =
let y = 5 in
not y;;
Characters 32-33:
not y;;
^
Error: This expression has type int
but an expression was expected of type bool
这段代码的程序员应该很好地理解这条消息的第二部分,即“y is expected of type bool”,因为“not y”部分。但是,她/他可能难以理解此错误消息的第一部分:如何推断此“y”具有“int”类型?因此,在引发类型冲突之前拥有部分推断类型集会很有趣。对于上面的示例,希望解释器告诉第一个“y”(来自“let y = 5”)是 int 类型,由此我将知道第二个“y”(来自“not y”)的原因) 被推断为 int 类型。
您能否告诉我某些 ocaml 解释器/编译器是否已经提供了所描述的功能?
概括地说,我的问题是:ocaml toplevel 或其解释器能否产生用户可以检索的部分推断类型,以便更有效地找到输入错误的来源?
由于部分推断的类型注释的非唯一性,这个问题可能没有意义。但是,示例示例应该表明,至少在某些情况下,某些部分推断的类型有其用途。
谢谢你的想法。