# Module type Core_hashtbl_intf.Creators

    module type Creators = sig .. end

    type ('a, 'b) t

    type 'a key

    type ('key, 'data, 'z) create_options

    val create : ('a key, 'b,
            unit -> ('a, 'b) t)
           create_options

    val of_alist : ('a key, 'b,
            ('a key * 'b) list ->
            [ `Duplicate_key of 'a key
            | `Ok of ('a, 'b) t ])
           create_options

    val of_alist_report_all_dups : ('a key, 'b,
            ('a key * 'b) list ->
            [ `Duplicate_keys of 'a key list
            | `Ok of ('a, 'b) t ])
           create_options

    val of_alist_or_error : ('a key, 'b,
            ('a key * 'b) list ->
            ('a, 'b) t Or_error.t)
           create_options

    val of_alist_exn : ('a key, 'b,
            ('a key * 'b) list ->
            ('a, 'b) t)
           create_options

    val of_alist_multi : ('a key, 'b list,
            ('a key * 'b) list ->
            ('a, 'b list) t)
           create_options

    val create_mapped : ('a key, 'b,
            get_key:('r -> 'a key) ->
            get_data:('r -> 'b) ->
            'r list ->
            [ `Duplicate_keys of 'a key list
            | `Ok of ('a, 'b) t ])
           create_options

     create_mapped get_key get_data [x1,...,xn]
             = of_alist [get_key x1, get_data x1; ...; get_key xn, get_data xn]

    val create_with_key : ('a key, 'r,
            get_key:('r -> 'a key) ->
            'r list ->
            [ `Duplicate_keys of 'a key list
            | `Ok of ('a, 'r) t ])
           create_options

     create_with_key ~get_key [x1,...,xn]
             = of_alist [get_key x1, x1; ...; get_key xn, xn]

    val create_with_key_or_error : ('a key, 'r,
            get_key:('r -> 'a key) ->
            'r list -> ('a, 'r) t Or_error.t)
           create_options

    val create_with_key_exn : ('a key, 'r,
            get_key:('r -> 'a key) ->
            'r list -> ('a, 'r) t)
           create_options

    val group : ('a key, 'b,
            get_key:('r -> 'a key) ->
            get_data:('r -> 'b) ->
            combine:('b -> 'b -> 'b) -> 'r list -> ('a, 'b) t)
           create_options