在OCaml utop中使用s-expression

时间:2017-01-05 14:18:00

标签: ocaml

我正在学习OCaml一本名为" Real World OCaml"到目前为止它运作良好。

我有sexp和Sexplib的问题。

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

这是一个教科书示例,但我在utop中有语法错误,with字加下划线。 Core.Std已公开。

任何人都能解释一下吗?我怀疑他们是否改变了语言语法。

3 个答案:

答案 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