min-caml 编译器如何得到类型错误?
How can min-caml compiler got the type error?
我在学习https://github.com/esumii/min-caml
floder测试的例子ack.ml:
let rec ack x y =
if x <= 0 then y + 1 else
if y <= 0 then ack (x - 1) 1 else
ack (x - 1) (ack x (y - 1)) in
print_int (ack 3 10)
如果我换行
print_int (ack 3 10)
对此:
print_int (ack 3 1.23)
然后make,报错:
Fatal error:exception Typing.Error(_,2,3)
我搜索了源代码,找不到 Typing.Error 的信息,或者 Fatal.so min-caml 如何捕获类型错误?ocaml 编译器以其他方式显示:
Error:this expression has type float but an expression was expected of type int
所以信息在哪里
Fatal error:exception Typing.Error(_,2,3)
来自?谢谢!
“致命错误:异常...”是未处理异常的输出(至少在本机可执行文件中,在解释器中消息只是说“异常:...”)。所以这意味着 Typing.Error
异常被引发但未被处理。
Typing.Error
指的是Typing
模块中定义的异常Error
。您会在 typing.ml
:
中找到它的定义
exception Error of t * Type.t * Type.t
它是在 line 151 of typing.ml 上通过将语法树添加到先前引发的 Unify
异常而引发的。
Unify
当类型检查器无法统一实际类型和预期类型时,会在文件中的不同位置引发异常。
我在学习https://github.com/esumii/min-caml
floder测试的例子ack.ml:
let rec ack x y =
if x <= 0 then y + 1 else
if y <= 0 then ack (x - 1) 1 else
ack (x - 1) (ack x (y - 1)) in
print_int (ack 3 10)
如果我换行
print_int (ack 3 10)
对此:
print_int (ack 3 1.23)
然后make,报错:
Fatal error:exception Typing.Error(_,2,3)
我搜索了源代码,找不到 Typing.Error 的信息,或者 Fatal.so min-caml 如何捕获类型错误?ocaml 编译器以其他方式显示:
Error:this expression has type float but an expression was expected of type int
所以信息在哪里
Fatal error:exception Typing.Error(_,2,3)
来自?谢谢!
“致命错误:异常...”是未处理异常的输出(至少在本机可执行文件中,在解释器中消息只是说“异常:...”)。所以这意味着 Typing.Error
异常被引发但未被处理。
Typing.Error
指的是Typing
模块中定义的异常Error
。您会在 typing.ml
:
exception Error of t * Type.t * Type.t
它是在 line 151 of typing.ml 上通过将语法树添加到先前引发的 Unify
异常而引发的。
Unify
当类型检查器无法统一实际类型和预期类型时,会在文件中的不同位置引发异常。