さまざまな方法で実装できる別のモジュールにアルゴリズムを実装するモジュールを作成しようとしています。だから私の考えは、最初のモジュールを次のように書くことでした
module type Base = sig
type t
val f : t -> t
end
次に、互換性のあるモジュールを介してパラメータ化された 2 番目のモジュールを作成しますBase
。
module type BasedOnBase = functor (B : Base) -> sig
type b
val g : B.t -> b
end
今、互換性のあるモジュールでパラメータ化されたモジュールを作成しようとしていますがBasedOnBase
、ここで行き詰まっています。私の素朴なアプローチはうまくいきません、私は試しました
(* won't compile *)
module type Alg = functor (BoB : BasedOnBase) -> sig
val h : BoB.b -> bool
end
としても
(* won't compile *)
module type Alg = functor (BoB : functor (B : Base) -> BasedOnBase) -> sig
val h : BoB.b -> bool
end
しかし、どちらの試みもこのエラーを引き起こします:
[...]
Error: Unbound type constructor BoB.b
だから私は明らかにここに何かが欠けていますが、問題を回避することができないようです。おそらくまったく異なる方法で、自分が望むものを達成するにはどうすればよいでしょうか?