如何解决utop 和打印构造函数
在 utop
(或 dune utop
)中加载代码并使用 Bin.Stop
打印任何数据构造函数(如 #show Bin.Stop;;
)时,我会崩溃。
utop # #show Bin.Stop;;
>> Fatal error: Ident.rename Bin.nat
Fatal error: exception Misc.Fatal_error
~ via ? v4.12.0 took 4m41s
❯
虽然 ocaml
不会崩溃。
这是一个错误还是有明显的原因为什么这会是非法的?
(* SOTypeLevelNat.ml *)
module Bin : sig
type stop = Qasdpaokdsap
type 'a zero = Sasddkasdo
type 'a one = Zoldjsfoij
type _ nat =
| Stop : 'stop nat
| Times2 : 'n nat -> 'n zero nat
| Times2Plus1 : 'n nat -> 'n one nat
end = struct
type stop = Qasdpaokdsap
type 'a zero = Sasddkasdo
type 'a one = Zoldjsfoij
type _ nat =
| Stop : 'stop nat
| Times2 : 'n nat -> 'n zero nat
| Times2Plus1 : 'n nat -> 'n one nat
end
utop # #use "SOTypeLevelNat.ml";;
module Peano :
sig
type 'a s = S
type z = Z
type 'n nat = Zero : 'a nat | Succ : 'n nat -> 'n s nat
end
module Bin :
sig
type stop = Qasdpaokdsap
type 'a zero = Sasddkasdo
type 'a one = Zoldjsfoij
type _ nat =
Stop : 'stop nat
| Times2 : 'n nat -> 'n zero nat
| Times2Plus1 : 'n nat -> 'n one nat
end
打印一个类型,比如 nat
工作得很好
utop # #show Bin.nat;;
type nonrec _ nat =
Stop : 'stop Bin.nat
| Times2 : 'n Bin.nat -> 'n Bin.zero Bin.nat
| Times2Plus1 : 'n Bin.nat -> 'n Bin.one Bin.nat
解决方法
发生在 utop
而不是 ocaml
中的顶级指令的致命错误是 utop
中的错误。
确实,utop
部分地重新实现了 OCaml REPL 的驱动程序逻辑,并且 utop 的代码最终可能会与底层 OCaml 的编译器库稍微过时。
请在以下地址报告此类问题:https://github.com/ocaml-community/utop/issues
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。