错误:尝试从命令行使用utop打开Core模块时出现未绑定模块Core

时间:2014-06-06 22:20:35

标签: ocaml opam utop

我试图通过设置opamutop和核心模块来跟随Real World OCaml。 I've followed these directions取得了一些成功。特别是,当我在没有指定要加载的文件的情况下运行utop时,我可以毫无问题地加载Core:

[dswain@Dupree scratch]$ utop
Welcome to utop version 1.12 (using OCaml version 4.01.0)!                                                                                    

Findlib has been successfully loaded. Additional directives:
...

utop # open Core;;
utop # 

到目前为止一切顺利。现在,如果我尝试使用相同的代码从命令行加载脚本:

[dswain@Dupree scratch]$ cat test.ml 
open Core.Std;;
[dswain@Dupree scratch]$ utop test.ml 
File "test.ml", line 1, characters 0-13:
Error: Unbound module Core
[dswain@Dupree scratch]$ 

我认为这是我在某个地方犯的配置错误,但我不太确定在哪里。

设置详细信息

我尝试重新安装ocamlopamutopcore无济于事。我有以下配置更改,我知道opam init在安装过程中做了:

〜/ .ocamlinit:

#use "topfind";;
#thread;;
#camlp4o;;
#require "core.top";;
#require "core.syntax";;

〜/ .bash_profile中

# OPAM configuration
. /home/dswain/.opam/opam-init/init.sh > /dev/null 2> /dev/null || true

eval `opam config env`

我正在运行Arch Linux,并按照步骤通过AUR安装opam,而我没有发现任何问题。我也能够建立和从安装说明中安装所有软件包,没有任何我知道的错误。

1 个答案:

答案 0 :(得分:2)

这是因为utop在运行.ocamlinit文件之前执行脚本文件。我不确定它是一个错误还是一个功能,但这就是编写代码的方式。实际上,大多数用户从emacs运行utop并使用C-c C-s将代码片段发送到utop。

如果您对emacs不满意,我建议您使用以下工作流程:

  1. start utop
  2. 在您喜欢的编辑器中进行编码
  3. 使用#use "your_file.ml";;
  4. 在utop中加载代码
  5. 玩它,如果不满意goto 2