我尝试使用Oasis编译一个小的OCaml [4.03.0 + flambda]项目。我有四个模块,三个在Modules字段中声明,一个在InternalModules中声明。我的_oasis配置文件是there。
内部模块名为Infix,包含一个子模块选项,它收集一些有用的中缀运算符来处理选项类型。在代码的当前github版本中,可用here,一切正常,我能够构建项目。无论如何,如果我添加行"打开Infix.Option"在源文件agent.ml中,现在它看起来像
[..LICENSE..]
open Lwt
open Cohttp
open Cohttp_lwt_unix
open Infix.Option
type http_status_code = Cohttp.Code.status_code
type http_headers = Cohttp.Header.t
[..]
我收到以下错误
+ /home/yann/.opam/4.03.0+flambda/bin/ocamlfind ocamlc -c -g -annot -bin-annot -package cohttp -package cohttp.lwt -package lambdasoup -package lwt -package uri -I src -o src/agent.cmo src/agent.ml
File "src/agent.ml", line 23, characters 5-17:
Error: Unbound module Infix.Option
这是意料之外的,特别是因为我当前的源文件page.ml执行相同的open并使用Infix.Open运算符而没有任何问题或错误。我想知道发生了什么以及为什么agent.ml和page.ml受到绿洲的不同对待...
答案 0 :(得分:2)
Lwt
有一个Infix
模块,它影响了您的Infix
模块。只需颠倒打开的顺序。
请注意,打开Lwt
通常被认为不是很好的风格。如果你想使用lwt的中缀运算符,你应该打开Lwt.Infix
。