![](/img/trans.png)
[英]How can I load a ml file in toplevel of OCaml, just like `use mine.sml` in SML/NJ?
[英]Can't load batteries using FindLib in Ocaml TopLevel
我成功安装了ocaml-batteries-included
和findlib
。
我可以毫无问题地做'ocamlfind ocamlc -package batteries -c mycode.ml`。
另外,如果我做ocamlfind list
,我得到
$ ocamlfind list
batteries (version: 2.0)
batteries.pa_comprehension (version: 2.0)
batteries.pa_comprehension.syntax (version: 2.0)
batteries.pa_llist (version: 2.0)
batteries.pa_llist.syntax (version: 2.0)
batteries.pa_string (version: 2.0)
batteries.pa_string.syntax (version: 2.0)
batteries.syntax (version: 2.0)
bigarray (version: [distributed with Ocaml])
camlp4 (version: [distributed with Ocaml])
...
问题是using batteries
ocaml (toplevel)
using batteries
。
我已经设置了.ocamlinit
:
#use "topfind";;
Toploop.use_silently
Format.err_formatter (Filename.concat (Findlib.package_directory
"batteries") "battop.ml");;
但是当我启动ocaml
,我得到了这个:
$ ocaml
OCaml version 4.00.1
Findlib has been successfully loaded. Additional directives:
#require "package";; to load a package
#list;; to list the available packages
#camlp4o;; to load camlp4 (standard syntax)
#camlp4r;; to load camlp4 (revised syntax)
#predicates "p,q,...";; to set these predicates
Topfind.reset();; to force that packages will be reloaded
#thread;; to enable threads
Exception: Fl_package_base.No_such_package ("batteries", "").
此外,如果我在ocaml toplevel
做#list
,我得到
# #list;;
bigarray (version: [distributed with Ocaml])
camlp4 (version: [distributed with Ocaml])
camlp4.exceptiontracer (version: [distributed with Ocaml])
camlp4.extend (version: [distributed with Ocaml])
...
我看不到batteries
包。
有什么问题?
你有没有使用OPAM的原因? ( https://github.com/OCamlPro/opam )
安装OPAM,切换到您最喜欢的4.0x版本编译器(例如opam switch 4.00.1
),然后运行: opam install batteries
。 我建议使用opam install utop
并使用utop
而不是vanilla toplevel。 在任一情况下:
将以下内容放在~/.ocamlinit
#use "topfind";;
#require "batteries";;
open Batteries;;
这就是让电池工作所需的一切。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.