sig
  type 'a t
  module Name :
    sig
      type 'a t
      val of_string : string -> 'Package.Name.t
      val to_string : 'Package.Name.t -> string
    end
  val get : string -> 'Package.t -> string
  val has : string -> 'Package.t -> bool
  val add : string -> string -> 'Package.t -> 'Package.t
  val print : Pervasives.out_channel -> 'Package.t -> unit
  val filter_print :
    string list -> Pervasives.out_channel -> 'Package.t -> unit
  module Set :
    sig
      type 'a t
      val empty : 'Package.Set.t
      val is_empty : 'Package.Set.t -> bool
      val add : 'Package.Name.t -> 'Package.Set.t -> 'Package.Set.t
      val from_list : 'Package.Name.t list -> 'Package.Set.t
      val mem : 'Package.Name.t -> 'Package.Set.t -> bool
      val exists : ('Package.Name.t -> bool) -> 'Package.Set.t -> bool
      val iter : ('Package.Name.t -> unit) -> 'Package.Set.t -> unit
      val cardinal : 'Package.Set.t -> int
      val elements : 'Package.Set.t -> 'Package.Name.t list
      val fold :
        ('Package.Name.t -> '-> 'b) -> 'Package.Set.t -> '-> 'b
      val filter :
        ('Package.Name.t -> bool) -> 'Package.Set.t -> 'Package.Set.t
    end
  val of_assoc :
    ([< `binary | `source ] as 'a) ->
    string Benl_core.StringMap.t -> 'Package.t
  module Map :
    sig
      type ('a, 'b) t
      val empty : ('a, 'b) Package.Map.t
      val is_empty : ('a, 'b) Package.Map.t -> bool
      val add :
        'Package.Name.t ->
        '-> ('a, 'b) Package.Map.t -> ('a, 'b) Package.Map.t
      val find : 'Package.Name.t -> ('a, 'b) Package.Map.t -> 'b
      val iter :
        ('Package.Name.t -> '-> unit) -> ('a, 'b) Package.Map.t -> unit
      val mapi :
        ('Package.Name.t -> '-> 'c) ->
        ('a, 'b) Package.Map.t -> ('a, 'c) Package.Map.t
      val fold :
        ('Package.Name.t -> '-> '-> 'c) ->
        ('a, 'b) Package.Map.t -> '-> 'c
      val bindings : ('a, 'b) Package.Map.t -> ('Package.Name.t * 'b) list
      val update_default :
        '->
        ('-> 'b) ->
        'Package.Name.t -> ('a, 'b) Package.Map.t -> ('a, 'b) Package.Map.t
      val mem : 'Package.Name.t -> ('a, 'b) Package.Map.t -> bool
    end
  val build_depends :
    [ `source ] Package.t -> [ `binary ] Package.Name.t list
  val binaries : [ `source ] Package.t -> [ `binary ] Package.Name.t list
  type dependency = {
    dep_name : string;
    dep_version : (Benl_types.comparison * string) option;
  }
  val dependencies : string -> 'Package.t -> Package.dependency list
end