sig
  module API :
    sig
      val init :
        OpamTypes.repository ->
        OpamTypes.compiler ->
        jobs:int ->
        OpamTypes.shell ->
        OpamTypes.filename -> [ `ask | `no | `yes ] -> unit
      val list :
        print_short:bool ->
        filter:[ `all | `installable | `installed | `roots ] ->
        order:[ `depends | `normal ] ->
        exact_name:bool ->
        case_sensitive:bool ->
        ?depends:OpamTypes.atom list ->
        ?reverse_depends:bool ->
        ?recursive_depends:bool ->
        ?resolve_depends:bool ->
        ?depopts:bool -> ?depexts:string list -> string list -> unit
      val info :
        fields:string list ->
        raw_opam:bool -> where:bool -> OpamTypes.atom list -> unit
      val install : OpamTypes.atom list -> bool option -> bool -> unit
      val reinstall : OpamTypes.atom list -> unit
      val update : repos_only:bool -> ?no_stats:bool -> string list -> unit
      val upgrade : OpamTypes.atom list -> unit
      val fixup : unit -> unit
      val remove :
        autoremove:bool -> force:bool -> OpamTypes.atom list -> unit
      module CONFIG :
        sig
          val env :
            csh:bool -> sexp:bool -> fish:bool -> inplace_path:bool -> unit
          val setup :
            OpamTypes.user_config option ->
            OpamTypes.global_config option -> unit
          val setup_list : OpamTypes.shell -> OpamTypes.filename -> unit
          val exec : inplace_path:bool -> string list -> unit
          val list : OpamTypes.name list -> unit
          val variable : OpamTypes.full_variable -> unit
          val subst : OpamTypes.basename list -> unit
        end
      module REPOSITORY :
        sig
          val list : short:bool -> unit
          val add :
            OpamTypes.repository_name ->
            OpamTypes.repository_kind ->
            OpamTypes.address -> priority:int option -> unit
          val remove : OpamTypes.repository_name -> unit
          val priority : OpamTypes.repository_name -> priority:int -> unit
          val set_url :
            OpamTypes.repository_name -> OpamTypes.address -> unit
        end
      module SWITCH :
        sig
          val switch :
            ?compiler:OpamTypes.compiler ->
            quiet:bool -> warning:bool -> OpamTypes.switch -> unit
          val install :
            quiet:bool ->
            warning:bool ->
            update_config:bool ->
            OpamTypes.switch -> OpamTypes.compiler -> unit
          val import : OpamTypes.filename option -> unit
          val export : OpamTypes.filename option -> unit
          val remove : OpamTypes.switch -> unit
          val reinstall : OpamTypes.switch -> unit
          val list : print_short:bool -> installed:bool -> all:bool -> unit
          val show : unit -> unit
        end
      module PIN :
        sig
          val pin :
            OpamPackage.Name.t ->
            ?edit:bool ->
            ?version:OpamTypes.version ->
            ?action:bool -> OpamTypes.pin_option option -> unit
          val edit : ?action:bool -> OpamPackage.Name.t -> unit
          val unpin : ?action:bool -> OpamPackage.Name.t list -> unit
          val list : short:bool -> unit -> unit
        end
    end
  val global_lock : (unit -> unit) -> unit
  val switch_lock : (unit -> unit) -> unit
  val read_lock : (unit -> unit) -> unit
  val with_switch_backup : string -> (OpamState.state -> unit) -> unit
  module SafeAPI :
    sig
      val init :
        OpamTypes.repository ->
        OpamTypes.compiler ->
        jobs:int ->
        OpamTypes.shell ->
        OpamTypes.filename -> [ `ask | `no | `yes ] -> unit
      val list :
        print_short:bool ->
        filter:[ `all | `installable | `installed | `roots ] ->
        order:[ `depends | `normal ] ->
        exact_name:bool ->
        case_sensitive:bool ->
        ?depends:OpamTypes.atom list ->
        ?reverse_depends:bool ->
        ?recursive_depends:bool ->
        ?resolve_depends:bool ->
        ?depopts:bool -> ?depexts:string list -> string list -> unit
      val info :
        fields:string list ->
        raw_opam:bool -> where:bool -> OpamTypes.atom list -> unit
      val install : OpamTypes.atom list -> bool option -> bool -> unit
      val reinstall : OpamTypes.atom list -> unit
      val update : repos_only:bool -> ?no_stats:bool -> string list -> unit
      val upgrade : OpamTypes.atom list -> unit
      val fixup : unit -> unit
      val remove :
        autoremove:bool -> force:bool -> OpamTypes.atom list -> unit
      module CONFIG :
        sig
          val env :
            csh:bool -> sexp:bool -> fish:bool -> inplace_path:bool -> unit
          val setup :
            OpamTypes.user_config option ->
            OpamTypes.global_config option -> unit
          val setup_list : OpamTypes.shell -> OpamTypes.filename -> unit
          val exec : inplace_path:bool -> string list -> unit
          val list : OpamTypes.name list -> unit
          val variable : OpamTypes.full_variable -> unit
          val subst : OpamTypes.basename list -> unit
        end
      module REPOSITORY :
        sig
          val list : short:bool -> unit
          val add :
            OpamTypes.repository_name ->
            OpamTypes.repository_kind ->
            OpamTypes.address -> priority:int option -> unit
          val remove : OpamTypes.repository_name -> unit
          val priority : OpamTypes.repository_name -> priority:int -> unit
          val set_url :
            OpamTypes.repository_name -> OpamTypes.address -> unit
        end
      module SWITCH :
        sig
          val switch :
            ?compiler:OpamTypes.compiler ->
            quiet:bool -> warning:bool -> OpamTypes.switch -> unit
          val install :
            quiet:bool ->
            warning:bool ->
            update_config:bool ->
            OpamTypes.switch -> OpamTypes.compiler -> unit
          val import : OpamTypes.filename option -> unit
          val export : OpamTypes.filename option -> unit
          val remove : OpamTypes.switch -> unit
          val reinstall : OpamTypes.switch -> unit
          val list : print_short:bool -> installed:bool -> all:bool -> unit
          val show : unit -> unit
        end
      module PIN :
        sig
          val pin :
            OpamPackage.Name.t ->
            ?edit:bool ->
            ?version:OpamTypes.version ->
            ?action:bool -> OpamTypes.pin_option option -> unit
          val edit : ?action:bool -> OpamPackage.Name.t -> unit
          val unpin : ?action:bool -> OpamPackage.Name.t list -> unit
          val list : short:bool -> unit -> unit
        end
    end
end