打印ocaml顶级的多态容器

use*_*588 6 ocaml pretty-print

假设我有自己的数据结构,作为一个愚蠢的例子 type 'a mylist = Empty | Cons of 'a * ('a mylist).

我想在表格中打印这个列表{a,b,...}.这里a,b类型'a是根据安装在带有#install_printer的顶层中的打印功能打印的,或者如果没有可用的打印功能,则为<abstr>.

我知道我将如何定义单态MYLIST打印功能,但有一个多态的方式来告诉只是把顶层{,,}与使用它已经知道该之间来在任何类型的?

hiv*_*ert 1

我认为这是不可能的。原因是 OCaml 在运行时丢弃类型,因此不可能有一个函数在运行时根据类型而表现不同。所以你不能定义这样的多态打印函数。请注意,这#install_printer不是 OCaml 语言的一部分,但它是顶层的指令,顶层仍然了解类型。唯一可能的解决方案是定义一个以打印函数'a作为参数的通用打印函数。就像是

'a -> string ->  'a mylist -> unit
Run Code Online (Sandbox Code Playgroud)

但我想你已经知道了,不是吗?