Поскольку вы используете расширение синтаксиса, которое переопределяет поведение обратных кавычек, вы не можете использовать полиморфные варианты, такие как `Bool в том же файле.
Я бы посоветовал вам сначала изменить расширение синтаксиса, чтобы использовать другоехарактер, чем обратные кавычки.Почему бы не %%
, например?
Другое решение простое, но более многословное: используйте два разных файла: один, в котором вы не используете расширение синтаксиса, и другой, в котором вы используете расширение синтаксиса.
В первом файле (без расширения синтаксиса) вы определяете тип с обычными вариантами, аналогичными тем, которые используются в Yojson, и функции для перевода из и в полиморфные варианты:
type t =
| Bool of ...
| ...
let to_yojson x =
match x with
| Bool v -> `Bool v
| ...
let from_yojson x =
match x with
| `Bool v -> Bool v
| ...
Таким образом, вы можете манипулировать этим новым типом в вашем коде с расширением синтаксиса без использования обратных кавычек, а затем использовать функции перевода для вызова Yojson.Перевод платный, но если это ваш случай, вам следует изменить синтаксическое расширение.