Невозможно использовать обратные кавычки в именах терминов, так как кавычки обратного тона используются camlp5 (OCaml) - PullRequest
1 голос
/ 14 ноября 2011

Я использую библиотеку Yojson, и один из используемых конструкторов называется `Bool (с обратным трюком).Я работаю с источником OCaml, где camlp5 используется так, что текст, окруженный обратными чертами, интерпретируется по-разному (например, текст преобразуется в структуру данных OCaml).

Проблема, с которой я сталкиваюсь, заключается в том, что когда `Boolпоявляется в моем исходном коде, camlp5 / OCaml видит обратную черту и думает, что это начало цитаты, вызывающее ошибку.Как я могу убедиться, что это интерпретируется как термин `Bool OCaml?Есть ли какой-то способ временно отключить то, что делает campl5?Какой-нибудь экранирующий символ, который я могу использовать?

1 Ответ

3 голосов
/ 19 февраля 2012

Поскольку вы используете расширение синтаксиса, которое переопределяет поведение обратных кавычек, вы не можете использовать полиморфные варианты, такие как `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.Перевод платный, но если это ваш случай, вам следует изменить синтаксическое расширение.

...