OCaml 中的运算符

Operators in OCaml

我创建了一个这样的模块:

module Foo = 
struct
   class foo =
   object(this)
   ...
   end
   let (><) (f1:foo) (f2:foo) = ... 
end

之后我在另一个文件中打开这个模块并尝试使用运算符 ><,但是 ocamlc 抛出了一个错误:"Error: Unbound value ><",但是在 utop 中这个运算符工作正常。

open Foo
let x = new Foo.foo;;
let y = new Foo.foo;;
let z = x >< y;;

这个问题可能与ocamlc的选项有关,我是这样编译的

ocamlfind ocamlc -linkpkg -thread -package core Foo.ml test.ml -o main

其中 Foo.ml 是一个包含模块 Foo 的文件,test.ml 包含运算符的用法。

那么,OCaml 是否支持这种使用运算符的方式,还是我做错了什么?

如果在名为 Foo 的文件中定义了名为 Foo 的模块,则内部模块的名称为 Foo.Foo。在 OCaml 中,文件的最外层形成一个以文件命名的模块。

你可以说include Foo.Foo。或者您可以从文件 Foo.

中删除模块 Foo 包装器