問題タブ [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 がファンクターの結果を正しく「見る」ことができないためですか?)
どうすればこれを修正できますか?
また、バリアント モジュールを個別に定義するのをスキップして、次のようにできるようにしたいと考えています。
...しかし、これによりエラーが発生します:
何が悪いのかわかりません。