gpt4 book ai didi

OCaml:如何一起使用电池和 ppx_deriving.*?

转载 作者:行者123 更新时间:2023-12-01 10:06:38 25 4
gpt4 key购买 nike

目前我正在尝试使用 Batteriesppx_deriving.show或类似的东西。
我想知道如何有效地一起使用它们。
要创建转储函数,我觉得 ppx_deriving.show 很有用。
但是我在使用它们时遇到了一些麻烦,如下所示。

open Batteries
type t = { a: (int,int) Map.t }
[@@deriving show]
现在 Map.pp未定义,因此无法编译。
我的临时修复是创建 module Map其中包括 Batteries.Map并定义函数 pp .
open Batteries
module Map = struct
include Map
let pp f g fmt t = ... (* create dump function by man hand *)
end

type t = { a: (int,int) Map.t }
[@@deriving show]
它有效,但对我来说适应所有数据结构很痛苦...... Coreppx_deriving.sexp是另一种选择,但我更喜欢 Batteriesppx_deriving.show .
有谁知道如何解决这个问题?

最佳答案

你的解决方法是正确的。如果您想对数据类型使用推导 M.t未声明 [@@deriving] ,你必须给出它的方法如M.pp对于 show自己:

module M = struct
include M
let pp = ... (* code for pretty-printing M.t *)
end

有一种方法可以部分自动化:
module M = struct
include M
type t = M.t = ... (* the same type definition of M.t *)
[@@deriving show]
end

它生成 M.pp对于类型 t使用 deriving .

ppx_import ,您可以避免复制和粘贴定义:
module M = struct
include M
type t = [%import: M.t]
[@@deriving show]
end

这应该扩展到以前的代码。

如您所见,导出 showMap.t但这并不是真的有用:通常你不想看到 Map.t 的二叉树表示。除非你在调试 Map模块本身。

关于OCaml:如何一起使用电池和 ppx_deriving.*?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42513872/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com