functor
  (T : T.T3) (Tree : T.T3) (Key : T.T1) (Options : T.T3) (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_or_error :
                                                                  ('k, 'cmp,
                                                                   ('Key.t *
                                                                    'v)
                                                                   list ->
                                                                   ('k, 'v,
                                                                    'cmp)
                                                                   T.t
                                                                   Or_error.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_alist_reduce :
                                                                  ('k, 'cmp,
                                                                   ('Key.t *
                                                                    'v)
                                                                   list ->
                                                                   f:
                                                                   ('->
                                                                    '-> 'v) ->
                                                                   ('k, 'v,
                                                                    '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