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