モジュールを1つのファイルに結合し、それらを再帰的にする必要があります。2つの別々のファイルのコンパイルプロセスからこれを行う方法はないと思います。
module rec A :
sig
val f : int -> int
val g : int -> int
end =
struct
let f x = (B.g x) + 1
let g x = x + 1
end
and B :
sig
val f : int -> int
val g : int -> int
end =
struct
let f x = (A.g x) + 1
let g x = x + 1
end
編集:あなたのコメントから、パーサーの型定義と、同じファイル内の型を処理/操作する関数があると思います。私はあなたに同意します、それは理にかなっています。しかし、そのファイルが型を操作するだけでなく、パーサーを呼び出してデータを生成する場合に経験したように、パーサーはどのようにデータを構築しますか?私の解決策は、タイプをそれ自体のモジュールに分離し、操作を実行するモジュールでそのモジュールを開くことでした。
したがって、A
(A
とA'
)に分割します。ここで、はによって生成され、で使用さA'
れる型を含みます。あなたの依存関係は、B
A
たとえば、作成したアプリケーションを起動するために使用する構成ファイル用のパーサーがあります。
ConfType --contains the type t
Conf --calls parser, and contains helper functions for type ConfType.t
ConfParser --for ocamlyacc
ConfLexer --for ocamllex
これに代わる方法は、多形バリアントを使用することです。このようにして、依存関係はアドホックに定義されるため、依存関係を削除します。もちろん、パーサーによって生成されたタイプは、Confのタイプとは異なる可能性があり、コンパイラーはエラーの解決を支援できません。