如果在 lib 的模块中定义了一条记录,并且它包含deriving
生成函数的注释,那么这些函数如何在另一个模块中使用?
例如,yaml
/ ppx_deriving_yaml
opam 模块包含一个[@@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 ^^^^^^^^^^^^
我的假设是,这是特定于派生和模块如何工作的东西。