在Ocaml Toplevel中打印多态性容器



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

我希望TopLevel以{a,b,...}表格打印此列表。此处的a'a类型的b是根据#Install_Printer在Toplevel中安装的打印功能打印的,或者如果没有可用,则为<abstr>

我知道如何为单态myList定义打印功能,但是是否有一种多态方法告诉TopLevel以仅放置{,}并使用它已经知道的任何类型的内容?<<<<<<<</p>

我认为这不可能。原因是OCAML在运行时扔掉类型,因此,根据运行时类型的不同函数不可能具有不同的函数。因此,您无法定义这样的多态性打印功能。请注意,#install_printer不是OCAML语言的一部分,而是Toplevel的指令,该指令仍然知道类型。唯一可能的解决方案是定义将'a打印功能作为参数的通用打印功能。像

'a -> string ->  'a mylist -> unit

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

最新更新