说我有自己的数据结构,作为一个愚蠢的示例, 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
但是我想你已经知道了,不是吗?