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 : 'a GettextCategory.MapCategory.t
      val is_empty : 'a GettextCategory.MapCategory.t -> bool
      val add :
        GettextCategory.MapCategory.key ->
        'a ->
        'a GettextCategory.MapCategory.t -> 'a GettextCategory.MapCategory.t
      val find :
        GettextCategory.MapCategory.key ->
        'a GettextCategory.MapCategory.t -> 'a
      val remove :
        GettextCategory.MapCategory.key ->
        'a GettextCategory.MapCategory.t -> 'a GettextCategory.MapCategory.t
      val mem :
        GettextCategory.MapCategory.key ->
        'a GettextCategory.MapCategory.t -> bool
      val iter :
        (GettextCategory.MapCategory.key -> 'a -> unit) ->
        'a GettextCategory.MapCategory.t -> unit
      val map :
        ('a -> 'b) ->
        'a GettextCategory.MapCategory.t -> 'b GettextCategory.MapCategory.t
      val mapi :
        (GettextCategory.MapCategory.key -> 'a -> 'b) ->
        'a GettextCategory.MapCategory.t -> 'b GettextCategory.MapCategory.t
      val fold :
        (GettextCategory.MapCategory.key -> 'a -> 'b -> 'b) ->
        'a GettextCategory.MapCategory.t -> 'b -> 'b
      val compare :
        ('a -> 'a -> int) ->
        'a GettextCategory.MapCategory.t ->
        'a GettextCategory.MapCategory.t -> int
      val equal :
        ('a -> 'a -> bool) ->
        'a GettextCategory.MapCategory.t ->
        'a GettextCategory.MapCategory.t -> bool
    end
end