sig
  type category =
      LC_CTYPE
    | LC_NUMERIC
    | LC_TIME
    | LC_COLLATE
    | LC_MONETARY
    | LC_MESSAGES
    | LC_ALL
  val string_of_category : GettextCategory.category -> string
  val category_of_string : string -> GettextCategory.category
  val categories : GettextCategory.category list
  val compare : GettextCategory.category -> GettextCategory.category -> int
  module MapCategory :
    sig
      type key = GettextCategory.category
      type +'a t
      val empty : 'GettextCategory.MapCategory.t
      val is_empty : 'GettextCategory.MapCategory.t -> bool
      val add :
        GettextCategory.MapCategory.key ->
        '->
        'GettextCategory.MapCategory.t -> 'GettextCategory.MapCategory.t
      val find :
        GettextCategory.MapCategory.key ->
        'GettextCategory.MapCategory.t -> 'a
      val remove :
        GettextCategory.MapCategory.key ->
        'GettextCategory.MapCategory.t -> 'GettextCategory.MapCategory.t
      val mem :
        GettextCategory.MapCategory.key ->
        'GettextCategory.MapCategory.t -> bool
      val iter :
        (GettextCategory.MapCategory.key -> '-> unit) ->
        'GettextCategory.MapCategory.t -> unit
      val map :
        ('-> 'b) ->
        'GettextCategory.MapCategory.t -> 'GettextCategory.MapCategory.t
      val mapi :
        (GettextCategory.MapCategory.key -> '-> 'b) ->
        'GettextCategory.MapCategory.t -> 'GettextCategory.MapCategory.t
      val fold :
        (GettextCategory.MapCategory.key -> '-> '-> 'b) ->
        'GettextCategory.MapCategory.t -> '-> 'b
      val compare :
        ('-> '-> int) ->
        'GettextCategory.MapCategory.t ->
        'GettextCategory.MapCategory.t -> int
      val equal :
        ('-> '-> bool) ->
        'GettextCategory.MapCategory.t ->
        'GettextCategory.MapCategory.t -> bool
    end
end