functor (T : T.T3->
  functor (Tree : T.T3->
    functor (Key : T.T1->
      functor (Options : T.T3->
        functor
          (M : sig
                 val empty : ('k, 'cmp, ('k, 'a, 'cmp) T.t) Options.t
                 val singleton :
                   ('k, 'cmp, 'Key.t -> '-> ('k, 'v, 'cmp) T.t) Options.t
                 val of_sorted_array :
                   ('k, 'cmp,
                    ('Key.t * 'v) array -> ('k, 'v, 'cmp) T.t Or_error.t)
                   Options.t
                 val of_sorted_array_unchecked :
                   ('k, 'cmp, ('Key.t * 'v) array -> ('k, 'v, 'cmp) T.t)
                   Options.t
                 val of_alist :
                   ('k, 'cmp,
                    ('Key.t * 'v) list ->
                    [ `Duplicate_key of 'Key.t | `Ok of ('k, 'v, 'cmp) T.t ])
                   Options.t
                 val of_alist_exn :
                   ('k, 'cmp, ('Key.t * 'v) list -> ('k, 'v, 'cmp) T.t)
                   Options.t
                 val of_alist_multi :
                   ('k, 'cmp,
                    ('Key.t * 'v) list -> ('k, 'v list, 'cmp) T.t)
                   Options.t
                 val of_alist_fold :
                   ('k, 'cmp,
                    ('Key.t * 'v1) list ->
                    init:'v2 -> f:('v2 -> 'v1 -> 'v2) -> ('k, 'v2, 'cmp) T.t)
                   Options.t
                 val of_tree :
                   ('k, 'cmp,
                    ('Key.t, 'v, 'cmp) Tree.t -> ('k, 'v, 'cmp) T.t)
                   Options.t
               end->
          sig  end