如何在ocaml中定义相互递归class和异常

how to define mutually-recursive class and exception in ocaml

我想定义一个 class foo 和一个异常 X,其构造函数以一对 foo 作为参数。 class foo 的方法应该能够引发异常 X...我无法设法获得这些的正确语法。谁能建议怎么做?

这是一个集思广益的建议。由于 OCaml 使用 classes 的结构类型,您可以在定义异常之前将 class 声明为类型。这是适合我的草图:

class type c = object method m : unit end

exception E of c * c

class myclass =
    object (self)
    method m : unit = raise (E ((self :> c), (self :> c)))
    end

当然这有点麻烦。