2011-09-15 49 views
14

我不知道如何在一般做到这一点,但我会问一个实例特别是净度:OCaml的顶层与语法扩展

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语法扩展,我得到一个语法错误。

回答

15

这是二十一世纪已经 - 使用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> 
+4

嘛,把我描述的橙色,叫我苏珊。谢谢。如果有任何学习资源在线或在任何地方,任何地方,甚至曾经提及过,这将非常有帮助。 – koschei

+0

哇,享受这个惯用的表达:)这里是一篇关于findlib(俄语)的文章 - https://github.com/camlunity/kamlo_wiki/blob/master/Findlib.md - 用这个例子扩大 – ygrek

+0

#camlp4o ;;以上呢?当我输入上面的部分时,我看不到任何加载的模块列表 - 但也没有错误。似乎没有工作。 – aneccodeal