sig
  val decompose_key : string -> string * string list
  module Out :
    sig
      type t
      val open_out : ?set_type:string -> string -> Dosebase.Out.t
      val close_out : Dosebase.Out.t -> unit
      val add_package :
        Dosebase.Out.t ->
        archive:string ->
        day:Lifetime.day -> (string * string * string list) list -> unit
      val rebuild_index : string -> unit
    end
  module In :
    sig
      type t
      type package
      val open_in : string -> Dosebase.In.t
      val close_in : Dosebase.In.t -> unit
      val count_population : Dosebase.In.t -> int
      val get_type : Dosebase.In.t -> string
      val iter :
        ?package:(unit_name:string ->
                  version:string ->
                  architecture:string -> Dosebase.In.package -> unit) ->
        ?lifetime:(archive:string ->
                   unit_name:string ->
                   version:string ->
                   architecture:string -> Lifetime.lifetime -> unit) ->
        Dosebase.In.t -> unit
      val iter_over_fields :
        (string * string * string list -> unit) ->
        Dosebase.In.t -> Dosebase.In.package -> unit
      val find_package :
        Dosebase.In.t ->
        unit_name:string ->
        version:string -> architecture:string -> Dosebase.In.package
      val find_lifetime :
        Dosebase.In.t ->
        architecture:string ->
        archive:string ->
        unit_name:string -> version:string -> Lifetime.lifetime
      val get_package_id : Dosebase.In.t -> Dosebase.In.package -> int
      val get_field :
        Dosebase.In.t ->
        Dosebase.In.package -> string -> string * string list
      val get_field_first :
        Dosebase.In.t -> Dosebase.In.package -> string -> string
      val known_fields : Dosebase.In.t -> string list
    end
  val napkin_of_fields : (string -> string) -> Napkin.default_package
end