sig
  val repo : OpamTypes.repository
  val packages : OpamPackage.Set.t
  val compilers : OpamCompiler.Set.t
  type 'a action = [ `Keep | `Remove | `Update of 'a ]
  val iter_packages_gen :
    (OpamPackage.t ->
     prefix:string option ->
     opam:OpamFile.OPAM.t ->
     descr:OpamFile.Descr.t option ->
     url:OpamFile.URL.t option ->
     dot_install:OpamFile.Dot_install.t option ->
     OpamFile.OPAM.t * OpamFile.Descr.t Opam_admin_top.action *
     OpamFile.URL.t Opam_admin_top.action *
     OpamFile.Dot_install.t Opam_admin_top.action) ->
    unit
  val filter_packages : string list -> OpamPackage.t -> bool
  val iter_packages :
    ?filter:(OpamPackage.t -> bool) ->
    ?f:(OpamPackage.t -> string option -> OpamFile.OPAM.t -> unit) ->
    ?opam:(OpamPackage.t -> OpamFile.OPAM.t -> OpamFile.OPAM.t) ->
    ?descr:(OpamPackage.t -> OpamFile.Descr.t -> OpamFile.Descr.t) ->
    ?url:(OpamPackage.t -> OpamFile.URL.t -> OpamFile.URL.t) ->
    ?dot_install:(OpamPackage.t ->
                  OpamFile.Dot_install.t -> OpamFile.Dot_install.t) ->
    unit -> unit
  val iter_compilers_gen :
    (OpamCompiler.t ->
     prefix:string option ->
     comp:OpamFile.Comp.t ->
     descr:OpamFile.Descr.t option ->
     OpamFile.Comp.t * OpamFile.Descr.t Opam_admin_top.action) ->
    unit
  val filter_compilers : string list -> OpamCompiler.t -> bool
  val iter_compilers :
    ?filter:(OpamCompiler.t -> bool) ->
    ?f:(OpamCompiler.t -> string option -> OpamFile.Comp.t -> unit) ->
    ?comp:(OpamCompiler.t -> OpamFile.Comp.t -> OpamFile.Comp.t) ->
    ?descr:(OpamCompiler.t -> OpamFile.Descr.t -> OpamFile.Descr.t) ->
    unit -> unit
end