sig
  type 'a selector =
      Sel_LEQ of 'a
    | Sel_GEQ of 'a
    | Sel_LT of 'a
    | Sel_GT of 'a
    | Sel_EQ of 'a
    | Sel_ANY
  val map_selector : ('-> 'b) -> 'Napkin.selector -> 'Napkin.selector
  type ('a, 'b, 'c) versioned =
      Unit_version of ('a * 'Napkin.selector)
    | Glob_pattern of 'c
  type ('a, 'b, 'c, 'd, 'e, 'f) package = {
    pk_unit : 'b;
    pk_version : 'c;
    pk_architecture : 'e;
    pk_extra : 'a;
    pk_size : int64;
    pk_installed_size : int64;
    pk_source : 'f;
    pk_provides : ('b, 'c, 'd) Napkin.versioned list;
    pk_conflicts : ('b, 'c, 'd) Napkin.versioned list;
    pk_breaks : ('b, 'c, 'd) Napkin.versioned list;
    pk_replaces : ('b, 'c, 'd) Napkin.versioned list;
    pk_depends : ('b, 'c, 'd) Napkin.versioned list list;
    pk_pre_depends : ('b, 'c, 'd) Napkin.versioned list list;
    pk_suggests : ('b, 'c, 'd) Napkin.versioned list list;
    pk_recommends : ('b, 'c, 'd) Napkin.versioned list list;
    pk_enhances : ('b, 'c, 'd) Napkin.versioned list list;
    pk_essential : bool;
    pk_build_essential : bool;
  }
  type default_package =
      (unit, string, string, string, string, string * string) Napkin.package
  type package_with_files =
      ((string * string) list, string, string, string, string,
       string * string)
      Napkin.package
  val map :
    extra:('-> 'b) ->
    unit:('-> 'd) ->
    version:('-> 'f) ->
    glob:('-> 'h) ->
    architecture:('-> 'j) ->
    source:('-> 'l) ->
    ('a, 'c, 'e, 'g, 'i, 'k) Napkin.package ->
    ('b, 'd, 'f, 'h, 'j, 'l) Napkin.package
  val string_of_versioned :
    (string, string, string) Napkin.versioned -> string
  val name : ('a, 'b, 'c, 'd, 'e, 'f) Napkin.package -> 'b * 'c * 'e
  type channel = Napkin.default_package Stream.t
  val to_default_package :
    ('a, string, string, string, string, string * string) Napkin.package ->
    Napkin.default_package
end