问题标签 [ppx]
For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.
ocaml - OCaml 将(无参数)变体序列化为“字符串枚举”(通过 Yojson)
假设我正在建立一个记录类型:
但我希望将 的可能值fruit
限制为一组固定的字符串。
在 OCaml 中将其建模为变体似乎很自然,例如:
到目前为止还好。
但是如果我[@@deriving yojson]
在这些类型上使用,那么序列化的输出将是:
默认情况下,Yojson 想要将一个变体序列化为一个元组[<name>, <args>...]
......我可以看到它的逻辑,但在这里没有帮助。
我希望它序列化为:
利用几个 ppx 派生插件,我设法构建了这个模块以根据需要进行反序列化:
哪个工作正常......但我有一些其他“字符串枚举”变体我想以同样的方式对待。我不想每次都复制和粘贴这段代码。
我做到了这一点:
这似乎是类型检查,我可以:
...但是当我尝试:
我明白了Error: Unbound value FruitEnum.t
似乎是因为我type t = V.t
从变体的模块重新导出,但我不太明白。(或者是因为 yojson ppx 无法正确“看到”仿函数的结果?)
我该如何解决这个问题?
我还希望能够跳过单独定义变体模块并执行以下操作:
...但这给出了错误:
我不明白出了什么问题。
ocaml - 如何在 utop 中使用 ppx 派生?
如何在我的 utop 中使用 ppx 派生( https://github.com/ocaml-ppx/ppx_deriving )?
例如,我必须遵循以下代码:
ocaml - 如何将 [@@deriving show] 应用于我的函子的模块参数中的类型?
我有一个仿函数,它的Set
类型如下:
S.elt
是集合元素的类型
我想以某种方式将[@@deriving show]
(来自https://github.com/ocaml-ppx/ppx_deriving#plugin-show)应用到S.elt
我的仿函数中,以便在我的一种方法中,我可以依赖一个show : S.elt -> string
可用的函数。
我觉得这一定是可能的,但我无法找出正确的语法。
或者 - 如果有一种方法可以在签名中指定 Set 类型S
具有“可显示”类型的元素。
例如我可以定义:
...但我不知道如何将其指定为对元素的类型约束(S : Set.S)
ocaml - 如何强制 ppx 使用 OCaml 版本?
我有下面的 OCaml 文件,它可以在没有这个文件的情况下正确编译ppx
并且失败dune
并与
错误是
这是有问题的 OCaml 文件,它使用了一种新语法(并提供了一个等效的 - 我相信 - 当它不可用时的版本)
为了确认错误的来源(并首先运行以避免浪费时间..),该命令
dune build --verbose
确实指向发生在ppx
可以强制ppx
使用 4.13,还是在 ppx 与给定版本不兼容时收到警告?(或者它是一个错误?)