2017-01-05 6 views
4

「Real World OCaml」というタイトルの本でOCamlを学んでいます。OCaml utopでs-expressionを使用する

私はsexpとSexplibに問題があります。

# module type M = sig 
# type t with sexp 
# end;; 

これは、教科書の例ですが、with単語に下線で私は、utopに構文エラーがあります。 Core.Stdが開いています。

誰でもこれを説明できますか?言語の構文が変更されたかどうかは疑問です。

答えて

0

Real Worl Ocamlはocaml 4.01.0に依存しています(序文参照)。 のocamlのこのバージョンでは、あなたが(コアの一部ではないです)最初Sexplib.syntaxを含める必要が

#require "sexplib.syntax";; 

これを持つために、あなたはまた、111.25(sexplibの右のリビジョンを選択しますtype_convをインストールする必要があります.00の代わりに.00)。

>opam install type_conv 
+0

あなたのソリューションはうまくいかず、多分あなたはそれをチェックすることができます。良い一日を過ごしてください(bonneannée2017)。 –

+0

hmmm、もう一度再チェックし、ocaml 4.01.0で動作します(それ以前は、opamの更新とアップグレードを実行します)。 Bonneannéetoo !!! –

+0

:あなたのソリューションは私より優れているようです。私はocaml 4.02.2を使用しています。あなたはユートプの指示のすべての始まりを私たちに見せてもらえますか? –

3

"with sexp"を[@@deriving sexp]に置き換えます。これには、ppx_sexp_convリライタも必要です。または、ppx_janeを使用することもできます。これにはすべてのJanestreet PPXリライタが含まれています(corebuildコマンドを使用すると自動的に使用されます)。

# #use "topfind";; 
# #require "core";; 
# #require "ppx_sexp_conv";; 
# open Core.Std;; 

# module type M = sig type t [@@deriving sexp] end;; 
module type M = 
    sig 
    type t 
    val t_of_sexp : Sexplib.Sexp.t -> t 
    val sexp_of_t : t -> Sexplib.Sexp.t 
    end 

説明:

http://blogs.janestreet.com/extension-points-or-how-ocaml-is-becoming-more-like-lisp/

1

実世界のOCamlは2013年に出版されたし、当然のことながら、いくつかの例は、OCamlの、特に構文拡張部分の最新バージョンでは動作しません。

学習者は、古いバージョンにロールバックしても構いません。 4.02.1では、本で提供されているほとんどのサンプルプログラムを実行できます。

opam switch 4.02.1 

opamバージョンを切り替えた後、あなたは、例えば、utopを再度必要なすべてを再インストールする必要があります。

関連する問題