あなたはLib
がが使用できるモジュールdesk.cma
であることを要求していますが、他のモジュールは使用できません。私は、CMAファイルの構造がこの種の制御を提供していないと確信しています。
Lib
をDesk
に定義すると、非表示にすることができます。
$ ls
desk.ml desk.mli test1.ml test2.ml test3.ml
$ cat desk.ml
module Lib = struct
let myfunction() = print_endline "Hello world"
end
module Liberty = Lib
$ cat desk.mli
module Liberty : sig
val myfunction : unit -> unit
end
$ cat test1.ml
Desk.Liberty.myfunction()
$ cat test2.ml
Lib.myfunction()
$ cat test3.ml
Desk.Lib.myfunction()
リバティーモジュールはテストプログラムに表示されますが、Libのモジュールがありません:
$ ocamlc -c desk.mli
$ ocamlc -a desk.ml -o desk.cma
$ ocamlc desk.cma test1.ml -o test1.byte
$ ./test1.byte
Hello world
$ ocamlc desk.cma test2.ml -o test2.byte
File "test2.ml", line 1, characters 0-14:
Error: Unbound module Lib
$ ocamlc desk.cma test3.ml -o test3.byte
File "test3.ml", line 1, characters 0-19:
Error: Unbound module Desk.Lib
あなたは別のファイルにLibのを実装することができ、その後、include
それはDesk.Lib
の定義にモジュール。
これは完全に満足のいく回答ではないと思われますが、それが役に立ちそうです。
非常に感謝しています! – Kites