在utop (或dune utop)中加载代码并使用#show Bin.Stop;;打印任何数据构造函数(如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不会崩溃。这是一个bug,还是有一个显而易见的原因,为什么这将是非法的?
(* 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
endutop # #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发布于 2021-04-22 23:14:18
在utop而不是ocaml中发生的toplevel指令的致命错误是utop中的错误。
实际上,utop部分地重新实现了OCaml的驱动程序逻辑,并且OCaml的代码最终可能会与底层的OCaml编译器库稍微过时。
请在以下地址报告此类问题:https://github.com/ocaml-community/utop/issues
https://stackoverflow.com/questions/67215748
复制相似问题