假设我有自己的数据结构,作为一个愚蠢的例子,
type 'a mylist = Empty | Cons of 'a * ('a mylist)
。
我希望以{a,b,...}
的形式打印此列表。此处a
,b
类型'a
根据安装在带有#install_printer的顶层中的打印功能打印,如果没有,则打印为<abstr>
。
我知道如何为单态mylist定义打印功能,但有多种方式可以告诉顶层只需放置{
,,
和}
并使用什么它已经知道介于两者之间的任何类型?
答案 0 :(得分:1)
我不认为这是可能的。原因是OCaml在运行时抛弃了类型,因此根据运行时的类型,不可能有一个行为不同的函数。所以你不能定义这样的多态打印功能。请注意,#install_printer
不是OCaml语言的一部分,但它是toplevel的指令,它仍然知道类型。唯一可行的解决方案是定义一个通用打印功能,该功能将'a
打印功能作为参数。像
'a -> string -> 'a mylist -> unit
但我想你已经知道了,不是吗?