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 : ('a -> 'b) -> 'a Napkin.selector -> 'b Napkin.selector
  type ('a, 'b, 'c) versioned =
      Unit_version of ('a * 'b 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:('a -> 'b) ->
    unit:('c -> 'd) ->
    version:('e -> 'f) ->
    glob:('g -> 'h) ->
    architecture:('i -> 'j) ->
    source:('k -> '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