utop 和打印构造函数

utop and printing constructors

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不会崩溃。 这是错误还是有明显的非法原因?

(* 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