2016-12-27 9 views
1

Это мой ocamlinit:Как настроить ocamlinit так, чтобы ppx работал?

(* Added by OPAM. *) 
let() = 
    try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") 
    with Not_found ->() 
;; 

(* ## added by OPAM user-setup for ocamltop/base ## 3ec62baf6f9c219ae06d9814069da862 ## you can edit, but keep this line *) 

#use "topfind";; 
(* ## end of OPAM user-setup addition for ocamltop/base ## keep this line *) 

#thread;; 

(* #ppx "ppx-jane -as-ppx";; *) 
#require "ppx_jane";; 
#require "core.top";; 
#require "async";; 
#require "core_extended";; 


open Core.Std;; 

С этим точно, я получаю это в utop

utop # type test = char list [@@deriving show];; 
Error: Cannot locate deriver show 

Если я использую строку, начинающуюся с #ppx вместо #require "ppx_jane", я получаю эту ошибку

utop # type test = char list [@@deriving show];; 
Error: ppx_type_conv: 'show' is not a supported type type-conv generator 

Как настроить ocamlinit для использования [@@deriving show]?

ответ

1

Мне это удалось, используя #require "ppx_deriving.show";;#require "ppx_jane";;) или без.

+0

Я пытался, но я не получил 'Нет такого пакета: deriving.show'. – ackerleytng

0

В дополнение к предложению Пьера я обнаружил, что мне необходимо линии с ppx_jane.

Кроме того, я использовал #require "ppx_deriving.std" вместо ppx_deriving.show, чтобы получить ord, а также остальную часть материала.

Вот мой полный ocamlinit

(* Added by OPAM. *) 
let() = 
    try Topdirs.dir_directory (Sys.getenv "OCAML_TOPLEVEL_PATH") 
    with Not_found ->() 
;; 

(* ## added by OPAM user-setup for ocamltop/base ## 3ec62baf6f9c219ae06d9814069da862 ## you can edit, but keep this line *) 
#use "topfind";; 
(* ## end of OPAM user-setup addition for ocamltop/base ## keep this line *) 

#thread;; 

#require "ppx_jane";; 
#require "core.top";; 
#require "async";; 
#require "core_extended";; 

#require "ppx_deriving.std";; 

open Core.Std;; 
+0

Увы! Он по-прежнему не работает в emacs utop. Когда я делаю C-c C-b, utop, кажется, относится к [@@, выводит шоу], как если бы его не было. – ackerleytng

+0

Однако, если я использую C-x C-e отдельно для каждой команды, utop, похоже, все в порядке. – ackerleytng