打印ocaml顶级的多态容器

时间:2014-03-09 11:45:36

标签: ocaml pretty-print

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

我希望以{a,b,...}的形式打印此列表。此处ab类型'a根据安装在带有#install_printer的顶层中的打印功能打印,如果没有,则打印为<abstr>

我知道如何为单态mylist定义打印功能,但有多种方式可以告诉顶层只需放置{,}并使用什么它已经知道介于两者之间的任何类型?

1 个答案:

答案 0 :(得分:1)

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

这样的东西
'a -> string ->  'a mylist -> unit

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

相关问题