js_of_ocaml Ошибка синтаксического анализа Camlp4 в определении типа

Я пытаюсь собрать эту программу с помощью js_of_ocaml. Согласно этому ответу, у меня есть следующая строка в моем make-файле

OCAMLC      = ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax -syntax camlp4o -linkpkg -g -dtypes

Однако, когда я пытаюсь построить, я получаю следующую ошибку:

ocamlfind ocamlc -package js_of_ocaml -package js_of_ocaml.syntax -syntax camlp4o -linkpkg -g -dtypes   -c types.ml
> File "types.ml", line 472, characters 11-12:
> Parse error: [type_longident] expected after ")" (in [type_ident_and_parameters])
> File "types.ml", line 1:

Оскорбительная строка файла такова:

type ('t,'v) parser = ('t list -> 'v -> unit) -> 't list -> unit

Я все еще довольно новичок в OCaml, поэтому я не совсем уверен, что происходит. Что делает -syntax camlp4o? Какие вещи в исходном коде мне нужно изменить, чтобы быть совместимым с js_of_ocaml?


person jmite    schedule 14.01.2018    source источник
comment
parser — это специальное ключевое слово для camlp4o, которого нет в ванильном OCaml. Вы должны переименовать его, насколько вы хотите его использовать.   -  person camlspotter    schedule 15.01.2018
comment
Собственно проблема. Напишите это как ответ, и я приму!   -  person jmite    schedule 15.01.2018


Ответы (1)


camlp4o обеспечивает тот же синтаксис, что и ванильный синтаксис OCaml, но с небольшой несовместимостью: parser — это специальное ключевое слово в camlp4o. Вот почему parser отклоняется, если вы используете синтаксис camlp4o.

Вы можете обойти эту проблему, переименовав parser или используя расширение синтаксиса PPX js_of_ocaml вместо CamlP4. Подробную информацию об этом более новом помощник по синтаксису для js_of_ocaml.

person camlspotter    schedule 16.01.2018
comment
Какие аргументы я могу предоставить ocamlfind для использования PPX? Я не смог найти его на странице Ocsigen. Во всех примерах используется PPX, но пример вызова ocamlc использует camlp4o. - person jmite; 16.01.2018