Working with ocaml's functional data structures has quickly become a job of connecting different functors together, and I'd appreciate some help. I have the following layout: module rec OrderedKey : OrderedKeyType = struct type t = Value.value_t let compare = compare let filter_idxs idxs = function | Value.VTuple l -> Value.VTuple(list_filter_idxs idxs l) | _ -> invalid_arg "not a vtuple" end and ValueBag : IBag.S with type elt = Value.value_t = IBag.Make(OrderedKey) and ValueMMap : IMultimap.S with type elt = Value.value_t and type bag = ValueBag.t = IMultimap.Make(OrderedKey) and Value : sig ... type value_t = ... end = Value The situation is as such: my multimap (IMultimap) contains an internal specialization of the IBag functor called an InnerBag. It attempts to return said bag, which is equivalent to the external ValueBag in structure. However, I don't know how to tell ocaml that the type 'bag' which is abstract in IMultimap is exactly the same as the external ValueBag. I tried to do that above, but what I get is a mismatch between IMultimap's internal InnerBag.t and the external ValueBag.t. Any help would be appreciated. Yotam