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 ('name, 'version, 'glob) versioned =
      Unit_version of ('name * 'version Napkin.selector)
    | Glob_pattern of 'glob
  type ('extra, 'unit, 'version, 'glob, 'architecture, 'source) package = {
    pk_unit : 'unit;
    pk_version : 'version;
    pk_architecture : 'architecture;
    pk_extra : 'extra;
    pk_size : int64;
    pk_installed_size : int64;
    pk_source : 'source;
    pk_provides : ('unit, 'version, 'glob) Napkin.versioned list;
    pk_conflicts : ('unit, 'version, 'glob) Napkin.versioned list;
    pk_breaks : ('unit, 'version, 'glob) Napkin.versioned list;
    pk_replaces : ('unit, 'version, 'glob) Napkin.versioned list;
    pk_depends : ('unit, 'version, 'glob) Napkin.versioned list list;
    pk_pre_depends : ('unit, 'version, 'glob) Napkin.versioned list list;
    pk_suggests : ('unit, 'version, 'glob) Napkin.versioned list list;
    pk_recommends : ('unit, 'version, 'glob) Napkin.versioned list list;
    pk_enhances : ('unit, 'version, 'glob) 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:('extra1 -> 'extra2) ->
    unit:('unit1 -> 'unit2) ->
    version:('version1 -> 'version2) ->
    glob:('glob1 -> 'glob2) ->
    architecture:('architecture1 -> 'architecture2) ->
    source:('source1 -> 'source2) ->
    ('extra1, 'unit1, 'version1, 'glob1, 'architecture1, 'source1)
    Napkin.package ->
    ('extra2, 'unit2, 'version2, 'glob2, 'architecture2, 'source2)
    Napkin.package
  val string_of_versioned :
    (string, string, string) Napkin.versioned -> string
  val name :
    ('extra, 'unit, 'version, 'glob, 'architecture, 'source) Napkin.package ->
    'unit * 'version * 'architecture
  type channel = Napkin.default_package Stream.t
  val to_default_package :
    ('a, string, string, string, string, string * string) Napkin.package ->
    Napkin.default_package
end