Как получить доступ к действительному идентификатору OCaml из Reason, который является зарезервированным ключевым словом в Reason

Есть ли способ использовать идентификатор OCaml, который является зарезервированным ключевым словом в Reason?

Рассмотрим следующий пример:

(* some_library.ml (valid OCaml) *)
type pub = {
  x: string;
}

Когда я пытаюсь использовать тип pub из Reason,

/* MyApp.re (invalid ReasonML) */
type someTypeAlias = Some_library.pub;

отображается ошибка синтаксической ошибки, поскольку pub является зарезервированным ключевым словом в Reason.

Error: 743: pub is a reserved keyword, it cannot be used as an identifier. Try `pub_` or `_pub` instead

Если я попытаюсь использовать предложенные идентификаторы (_pub или pub_), это не сработает, потому что они ожидают того же имени в файле OCaml.

Чтобы быть более конкретным, я пытаюсь использовать введите в библиотеку Nocrypto.

Было бы неплохо, если бы был способ избежать ключевого слова в ReasonML или указать доступное имя в OCaml ... Что-то вроде

/* MyApp.re (draft/invalid ReasonML) */
type someTypeAlias = Some_library.[@reason.keyword_as_identifier "pub"];

Есть что-то подобное? Или невозможно было бы создать обходной путь с помощью external? Мне не очень нравится разветвлять библиотеку только для того, чтобы переименовать один тип.


person jhrdka    schedule 08.03.2019    source источник
comment
Я думаю, что это ошибка в текущем выпуске (3.4.0) Reason. Имена значений переведены, а имена типов - нет. Пока это не будет исправлено, ответ @ octachron является разумным решением.   -  person hcarty    schedule 08.03.2019
comment
Здесь создана проблема: github.com/facebook/reason/issues/2341   -  person hcarty    schedule 08.03.2019


Ответы (1)


Простым обходным решением было бы добавить псевдоним типа в оболочку синтаксиса Ocaml:

 type notpub = pub = { x: string }
person octachron    schedule 08.03.2019