2016-06-16 3 views
0

Я пытаюсь скомпилировать небольшой проект OCaml [4.03.0 + flambda] с использованием Oasis. У меня есть четыре модуля, три из которых указаны в поле «Модули» и один - с использованием «Внутренние модули». Мой файл конфигурации _oasis: there.OASIS «выборочная» ошибка модуля Unbound для внутреннего модуля

Внутренний модуль называется Infix и содержит параметр подмодуля, который собирает некоторые полезные операторы 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 выполняет одно и то же открытие и использует операторы Infix.Open без каких-либо проблем или ошибок. Интересно, что происходит, и почему agent.ml и page.ml обрабатываются по-разному оазисом ...

ответ

2

Lwt имеет модуль Infix, который затеняет ваш модуль Infix. Просто измените порядок открытия.

Обратите внимание, что открытие Lwt часто считается не очень хорошим стилем. Если вы хотите использовать инфиксный оператор lwt, вместо этого вы должны открыть Lwt.Infix.

Смежные вопросы