如果在 lib 的模块中定义了一条记录,并且它包含deriving生成函数的注释,那么这些函数如何在另一个模块中使用?
例如,yaml/ ppx_deriving_yamlopam 模块包含一个[@@deriving yaml]. 如果[@@deriving yaml]应用于记录,则会生成函数,例如{record_name}_to_yaml将记录转换为 Yaml 数据结构的函数。
例子:[@@deriving yaml]添加到book记录时,编译时会生成几个函数,一个是book_to_yaml.
(* ./lib/books.ml *)
type book = {
title: string;
authors: string list
} [@@deriving yaml]
但是,如果您尝试book_to_yaml从Books模块外部访问,则它不可用。
为什么这个功能不可用?它是如何访问的?
(* ./bin/main.ml *)
let () =
let (b: book) = { title = "Cryptonomicon"; authors = [ "Neal Stephenson" ] } in
Yaml.pp Stdlib.Format.std_formatter (book_to_yaml b);
Error ^^^^^^^^^^^^
我的假设是,这是特定于派生和模块如何工作的东西。