Comment puis-je dériver des méthodes to_string
pour les types de données en utilisant ppx avec jbuilder?comment dériver des méthodes to_string pour les types de données en utilisant ppx
Par exemple, je suis en train d'utiliser @@deriving show
pour dériver show_*
méthodes pour un type de données. J'ai un simple fichier main.ml
qui ressemble à ceci:
open Core
type foo = Bar | Baz
[@@deriving show]
let() = printf "%s\n" (show_foo Bar)
J'ai un fichier jbuild
dans le même répertoire qui ressemble à ceci:
(jbuild_version 1)
(executables
((names (main))
(libraries (core ppx_deriving))
(preprocess (pps (ppx_deriving.show)))))
(install
((section bin)
(files ((main.exe as my_foo)))))
Quand je lance jbuilder build
, je reçois l'erreur suivante:
File "main.ml", line 6, characters 24-32:
Error: Unbound value show_foo
Il semble que jbuilder
ne fonctionne pas ppx_deriving.show
préprocesseur, et ne génère pas e e show_foo
fonction.
Mon utilisation de @@derive show
est-elle correcte? Ai-je besoin d'ajouter quelque chose à mon fichier jbuild
pour le faire fonctionner correctement? Est-ce que ppx_deriving
a un problème de travail avec jbuilder
? Dois-je utiliser une bibliothèque ppx différente? Dois-je utiliser un système de construction différent? Comment la plupart des OCamlers traitent-ils ces problèmes de système de construction?
modifier: J'utilise la version OCaml 4.04.2, version 1.0 + JBuilder beta11 et ppx_deriving version 4.1.
Lors de la publication de questions sur 'jbuilder', il est nécessaire d'inclure un fichier' * .opam'? Est-ce que 'jbuilder' regarde ce fichier pour comprendre comment construire l'exécutable? – illabout
J'ai juste essayé de mettre à jour 'jbuilder' et' ppx_deriving' et maintenant cela semble fonctionner. Ma version 'jbuilder' est [1.0 + beta12] (https://github.com/janestreet/jbuilder/blob/1c85e646bc732189739e31e697b5e60bbd2221ba/CHANGES.md#10beta12-18082017) et' ppx_deriving' est la version [4.2] (https: // github.com/ocaml-ppx/ppx_deriving/blob/7969277d1ec02517f441930e449d115d64a2a778/CHANGELOG.md#42). – illabout
En utilisant les deux versions de paquetage ci-dessus, ce code fonctionne également avec la version OCaml '4.05.0'. – illabout