OCaml верхнего уровня с расширениями синтаксиса - PullRequest
14 голосов
/ 16 сентября 2011

Я не знаю, как этого добиться в целом, но для ясности я попрошу об одном конкретном случае:

Sexplib выглядит мне интересно.Я хочу поиграть с этим.Я скачал его, установил его очень хорошо (в любом случае, я вполне уверен) и т. Д. Я хочу использовать расширение синтаксиса "with sexp" на верхнем уровне.Как бы я поступил так?Все примеры его использования, которые я нашел, предполагают, что вы уже знаете, как сделать верхний уровень и / или скомпилировать с расширениями синтаксиса.

Мой лучший выстрел в этом был примерно таким:

ocamlmktop -I +site-lib/sexplib -pp "camlp4 -I +site-lib/sexplib pa_sexp_conv.cma" -o sexplib-top

Когда я запускаю этот уровень, я могу open Sexplib просто отлично, но когда я пытаюсь использовать расширение синтаксиса with sexp, я получаю синтаксическую ошибку.

1 Ответ

15 голосов
/ 16 сентября 2011

Уже XXI век - используйте ocamlfind:

        Objective Caml version 3.11.2

# #use "topfind";;
- : unit = ()

# #camlp4o;;
/usr/lib/ocaml/dynlink.cma: loaded
/usr/lib/ocaml/camlp4: added to search path
/usr/lib/ocaml/camlp4/camlp4o.cma: loaded
    Camlp4 Parsing version 3.11.2

# #require "sexplib.syntax";;
/usr/lib/ocaml/unix.cma: loaded
/usr/lib/ocaml/bigarray.cma: loaded
/usr/lib/ocaml/nums.cma: loaded
/usr/lib/ocaml/num-top: added to search path
/usr/lib/ocaml/num-top/num_top.cma: loaded
/usr/lib/ocaml/sexplib: added to search path
/usr/lib/ocaml/sexplib/sexplib.cma: loaded
/usr/lib/ocaml/type-conv: added to search path
/usr/lib/ocaml/type-conv/pa_type_conv.cmo: loaded
/usr/lib/ocaml/sexplib/pa_sexp_conv.cmo: loaded

# type t = { x : int; y : float; } with sexp;;
type t = { x : int; y : float; }
val t_of_sexp__ : Sexplib.Sexp.t -> t = <fun>
val t_of_sexp : Sexplib.Sexp.t -> t = <fun>
val sexp_of_t : t -> Sexplib.Sexp.t = <fun>
...