如何将OCaml值打印在顶层之外?

jrk*_*jrk 15 ocaml pretty-print

OCaml repl("toplevel")具有丰富的打印功能,适用于任何类型,用户定义或其他类型.是否可以在顶层之外访问此功能,而不必为自己的整个类型集编写一组完全自定义的值打印机?

Gil*_*il' 11

漂亮的印刷设施是顶层图书馆的一部分.你会找到来源的toplevel/genprintval.ml.这是可以理解的,考虑到它需要类型信息:你不能只是抛出任何价值,漂亮的打印机的选择是基于类型.

如果你想在你的程序中使用这个代码,你需要链接到顶层库(toplevellib.cma)或编译genprintval(这意味着引入类型检查器的足够位来分析类型,它可以变得非常大).

在调试器(debugger/printval.mldebugger/loadprinter.ml)中有一个类似的工具(但我认为不共享代码).

您可以直接链接第三方库,并提供漂亮的打印功能.EXTLIBStd.dump提供了一个非常粗设施(未基于所述类型).推导由Jeremy Yallop和杰克多纳姆是另一种方法.这个Caml Weekly News项目提供了更多建议.


new*_*cct 10

OCaml Batteries Included库包含dumpBatPervasives模块中的功能.它将任何值转换为字符串并返回它.你可以在这里看到它的源代码.输出将与顶层不同,因为某些信息在运行时会丢失,例如抽象数据类型构造函数将变为整数.