我尝试使用OASIS编译一个小的OCAML [4.03.0 Flambda]项目。我有四个模块,在模块字段中声明了三个模块,一个使用内部模块。我的_OASIS配置文件在那里。
内部模块被命名为infix,并包含一个子模块选项,该选项收集了一些有用的Infix操作员来处理选项类型。在当前代码的GitHub版本中,可以在此处获得,一切正常,我能够构建项目。无论如何,如果我在源文件代理中添加" open infix.option"行,以便现在看起来像
[..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执行相同的打开并使用infix.poin.pon operator。没有任何问题或错误。我想知道发生了什么以及为什么oasis对apent.ml和page.ml的处理方式有所不同...
Lwt
具有Infix
模块,该模块会遮蔽您的Infix
模块。只需扭转打开的顺序即可。
请注意,打开Lwt
通常被认为不是很好的样式。如果要使用LWT的Infix操作员,则应打开Lwt.Infix
。