Не для того, чтобы противоречить тому, что говорит Октахрон, но на самом деле можно получить какое-то оборудование для захоронения, которое будет таким полиморфным.Это было бы хрупко, и действительно не будет различать []
, 0
, None
, но будет работать довольно хорошо со встроенными типами OCaml.Такая функция может быть найдена в различных библиотеках с различными модификациями, например, библиотеки Extlib и Батареи предоставляют ее под именем dump
, вот пример взаимодействия с ней верхнего уровня:
# #use "topfind";;
# #require "extlib";;
# Std.dump;;
- : 'a -> string = <fun>
# Std.dump ["hello"; "world"];;
- : string = "[\"hello\"; \"world\"]"
# Std.dump [];;
- : string = "0"
# Std.dump None;;
- : string = "0"
# Std.dump [|"hello"|];;
- : string = "(\"hello\")"
# module Abstract : sig type t val x : t end =
struct type t = string list let x = ["hello, world"] end;;
module Abstract : sig type t val x : t end
# Std.dump Abstract.x;;
- : string = "[\"hello, world\"]"
#
Имея всю эту мощь в ваших руках, я все равно рекомендую вам использовать ее только для целей отладки.
Наконец, если вам интересно, как работает красивая печать высокого уровня,вот ответ.Фактически, он опирается на среду ввода, доступную для верхнего уровня, которая частично является интерпретатором, а частично компилятором.Эта симпатичная типография все еще довольно хрупкая.