2011-09-15 44 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