utop error: No such package: sexplib.syntax - required by `core.syntax'

utop error: No such package: sexplib.syntax - required by `core.syntax'

我正在尝试按照 Real World Ocaml 说明 here 设置 emacs ocaml 环境,但是当我启动 utop 时出现错误:

No such package: sexplib.syntax - required by `core.syntax'

如果我从命令行 运行: ocamlfind list | grep sexp 我得到 :

ppx_sexp_conv       (version: 113.24.00)
ppx_sexp_conv.expander (version: 113.24.00)
ppx_sexp_conv.expander.for_ppx_deriving (version: n/a)
ppx_sexp_message    (version: 113.24.00)
ppx_sexp_value      (version: 113.24.00)
sexplib             (version: 113.24.00)
sexplib.num         (version: 113.24.00)
sexplib.unix        (version: 113.24.00)

在我的新手看来,这表明 sexplib.syntax 不存在。

有谁知道如何解决这个问题?

我怀疑这是一个错误,由核心套件最近从 camlp4 过渡到 ppx 引起。它应该在 113.24.01 中修复,因此请确保您有

 opam update
 opam upgrade

然后安装最新版本:

 opam install core.113.24.01

如果这没有帮助,那么另一个选择是在转换之前回退到旧版本,例如

 opam install core.113.00.00

为了防止库自动升级,可以pin一下:

 opam pin add core 113.00.00
从 113.24.00 版本开始不再支持

core.syntax。我做了一个核心版本 (113.24.02) 的小版本以使其生效。

您现在应该使用 ppx_jane。它相当于 Jane Street ppx 重写器的 core.syntaxReal World OCaml 说明已更新。

您可以将 ppx_jane 作为常规 findlib 包使用或直接使用:

(* Regular findlib package *)
# #require "ppx_jane";;
(* Directly *)
# #ppx "ppx-jane -as-ppx";;

上面没有提到的一个方面是安装 opam 包 sexplib 不足以获取 findlib sexplib.syntax,即使是 113.00.00 或更早的版本:一定要还要安装 opam 包 type_conv