Как получить методы 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 флаг.

Другие вопросы по тегам