我正在学习OCaml一本名为" Real World OCaml"到目前为止它运作良好。
我有sexp和Sexplib的问题。
# module type M = sig
# type t with sexp
# end;;
这是一个教科书示例,但我在utop中有语法错误,with
字加下划线。 Core.Std
已公开。
任何人都能解释一下吗?我怀疑他们是否改变了语言语法。
答案 0 :(得分:4)
替换" 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 :(得分:1)
Real World OCaml 于2013年发布,可以理解的是,一些示例不适用于最新版本的OCaml,特别是语法扩展部分。
作为学习者,如果您不介意回滚到旧版本,例如4.02.1,您可以运行本书提供的大多数示例程序。
opam switch 4.02.1
切换opam版本后,您可能需要重新安装所需的所有内容,例如utop。
答案 2 :(得分:0)
Real Worl Ocaml依赖于ocaml 4.01.0(参见序言)。 使用此版本的ocaml,您需要首先包含Sexplib.syntax(这不是Core的一部分)
#require "sexplib.syntax";;
为此,您还需要安装type_conv,它将选择正确的sexplib修订版(111.25.00而不是112.01.00)。
>opam install type_conv