次のようにいくつかのモジュールを定義しました。
(* zone.ml *)
module ZoneFun (Prop : PROP) = (struct ... end: ZONE)
(* zones.ml *)
module ZonesFun (Zone : ZONE) = (struct ... end: ZONES)
どこでモジュールと他のいくつかのモジュールPROP
のインターフェースですType
。
(* calculate.ml *)
open Type
open Zone
open Zones
module ZoneType = ZoneFun(Type)
module ZonesType = ZonesFun(ZoneType)
let tries (x: ZonesType.t) : unit =
Printf.printf "haha"
(* abs.ml *)
open Type
open Zone
open Zones
open Calculate
module ZoneType = ZoneFun(Type)
module ZonesType = ZonesFun(ZoneType)
module Abs = struct
...
let abc (x: ZonesType.t) : unit =
Calculate.tries x
...
end
次に、コンパイルにより、 in の行でエラーが発生しCalculate.tries x
ますabs.ml
。
Error: This expression has type ZonesType.t = Zones.ZonesFun(ZoneType).t
but an expression was expected of type
Calculate.ZonesType.t = Zones.ZonesFun(Calculate.ZoneType).t
実際にofCalculate.ZonesType.t
と同じであることをコンパイラにどのように伝えることができますか?ZonesType.t
abs.ml