从命令行传递Ocaml文件但不在repl中传递文件时键入错误

时间:2018-02-18 05:12:44

标签: ocaml

我的代码在从文件运行时出错,但在粘贴到Ocaml repl时运行正常。我已将以下内容保存为test.ml:

module StringSet = Set.Make(String)

let words = StringSet.add StringSet.empty "something";;

当使用“ocaml test.ml”从bash运行时,我得到:

File "test.ml", line 3, characters 26-41:
Error: This expression has type StringSet.t = Set.Make(String).t
       but an expression was expected of type StringSet.elt = string

当粘贴到Ocaml repl中时,我得到:

# module StringSet = Set.Make(String)

let words = StringSet.add StringSet.empty "something";;
    module StringSet :
  sig
(* ... much more output ... *)
  end
val words : StringSet.t = <abstr>
#

从repl看,一切似乎都很好。 我的Ocaml版本由repl报告为:OCaml版本4.02.1。

有没有人知道为什么在运行“ocaml test.ml”时会产生错误?

1 个答案:

答案 0 :(得分:0)

StringSet.add函数将元素(字符串)作为第一个参数,将集合(StringSet.empty)作为第二个参数。你有相反的顺序。

当我尝试你的代码时,我在两种情况下都会遇到同样的错误。当我反转参数顺序时,我不会在任何一种情况下都出错。

我正在使用OCaml 4.06.0,但我真的怀疑参数顺序已经改变。