Как и в предыдущих ответах, ppx_sexp - это PPX для генерации принтеров из определений типов.Вот пример того, как использовать его при использовании jbuilder в качестве системы сборки и использовании Base и Stdio в качестве stdlib.
Во-первых, файл jbuild, который определяет, как выполнять сборку:
(jbuild_version 1)
(executables
((names (w))
(libraries (base stdio))
(preprocess (pps (ppx_jane ppx_driver.runner)))
))
А вот код.
open Base
open Stdio
type t = { a: int; b: float * float }
[@@deriving sexp]
let () =
let x = { a = 3; b = (4.5,5.6) } in
[%sexp (x : t)] |> Sexp.to_string_hum |> print_endline
И когда вы запустите его, вы получите такой вывод:
((a 3) (b (4.5 5.6)))
Преобразователи S-выражений присутствуют по всей Base и во всех связанных библиотеках (Stdio, Core_kernel, Core, Async, Incremental и т. Д.), И поэтому вы можете в значительной степени рассчитывать на возможность сериализации любой структуры данных, с которой вы сталкиваетесь, а также всего, что вы определяете самостоятельно.