Похоже, что эта функция еще не выпущена для общественности, вероятно, она будет выпущена как часть v0.13
версии.
Если мы посмотрим на файл README самого последнего на сегодняшний день (апрель 2019 года) пакета ppx_sexp_conv, мы не найдем упоминаний о [@sexp.opaque]
$ opam source ppx_sexp_conv.v0.12.0
$ grep sexp.opaque ppx_sexp_conv.v0.12.0/README.org
converters, simply apply the qualifier =sexp_opaque= as if it were a
type foo = int * stuff sexp_opaque [@@deriving sexp]
.видите, только старый sexp_opaque
трюк.Так что нам остается использовать его в текущий момент времени, например,
type t =
| Default
| Regexp of
{ re : Re.re sexp_opaque;
; a : int
}
Конструктор типа 'a sexp_opaque
определен как 'a sexp_opaque = 'a
, за исключением того, что конвертеры sexp будут считать его непрозрачнымэлемент.
Скорее всего, это сломается в будущих выпусках библиотек JS, поэтому я бы предложил вам более многословное, но стабильное решение:
type regex = Re.t
let sexp_of_regex = sexp_of_opaque
let regex_of_sexp = opaque_of_sexp
type t =
| Default
| Regexp of
{ re : regex;
; a : int
}
[@@deriving sexp]