Как получить методы to_string для типов данных, используя PPX
Как я могу получить to_string
методы для типов данных, использующих ppx с jbuilder?
Например, я пытаюсь использовать @@deriving show
вывести show_*
методы для типа данных. У меня простой main.ml
файл, который выглядит так:
open Core
type foo = Bar | Baz
[@@deriving show]
let () = printf "%s\n" (show_foo Bar)
у меня есть jbuild
файл в том же каталоге, который выглядит следующим образом:
(jbuild_version 1)
(executables
((names (main))
(libraries (core ppx_deriving))
(preprocess (pps (ppx_deriving.show)))))
(install
((section bin)
(files ((main.exe as my_foo)))))
Когда я бегу jbuilder build
Я получаю следующую ошибку:
File "main.ml", line 6, characters 24-32:
Error: Unbound value show_foo
Это похоже на jbuilder
не работает ppx_deriving.show
препроцессор, и не генерирует show_foo
функция.
Мое использование @@derive show
правильный? Нужно ли что-то добавить в мой jbuild
файл, чтобы заставить его работать правильно? Есть ли ppx_deriving
есть проблемы с работой jbuilder
? Должен ли я использовать другую библиотеку PPX? Должен ли я использовать другую систему сборки? Как большинство OCamlers справляются с подобными проблемами системы сборки?
редактировать: я использую OCaml версии 4.04.2, jbuilder версии 1.0+beta11 и ppx_deriving версии 4.1.
1 ответ
Как вы обнаружили в комментариях, это требует особой обработки в ppx_deriving
который был объединен только в версии 4.2.
Основная причина заключается в том, что jbuilder
использования ppx_driver
применять PPX переписчики, а не -ppx
флаг.