sig   module Cobj :     sig       module Digest :         sig           type t = string           val compare : t -> t -> int           val equal : t -> t -> bool           val string : string -> t           val bytes : bytes -> t           val substring : string -> int -> int -> t           val subbytes : bytes -> int -> int -> t           external channel : in_channel -> int -> t = "caml_md5_chan"           val file : string -> t           val output : out_channel -> t -> unit           val input : in_channel -> t           val to_hex : t -> string           val from_hex : string -> t           val pp : Format.formatter -> t -> unit           val pp_opt : Format.formatter -> t option -> unit           module Set :             sig               type elt = t               type t               val empty : t               val is_empty : t -> bool               val mem : elt -> t -> bool               val add : elt -> t -> t               val singleton : elt -> t               val remove : elt -> t -> t               val union : t -> t -> t               val inter : t -> t -> t               val diff : t -> t -> t               val compare : t -> t -> int               val equal : t -> t -> bool               val subset : t -> t -> bool               val iter : (elt -> unit) -> t -> unit               val fold : (elt -> '-> 'a) -> t -> '-> 'a               val for_all : (elt -> bool) -> t -> bool               val exists : (elt -> bool) -> t -> bool               val filter : (elt -> bool) -> t -> t               val partition : (elt -> bool) -> t -> t * t               val cardinal : t -> int               val elements : t -> elt list               val split : elt -> t -> t * bool * t               val find : elt -> t -> elt option               val get : elt -> t -> elt               val min_elt : t -> elt option               val get_min_elt : t -> elt               val max_elt : t -> elt option               val get_max_elt : t -> elt               val choose : t -> elt option               val get_any_elt : t -> elt               val to_list : t -> elt list               val of_list : elt list -> t               val pp :                 ?sep:(Format.formatter -> unit -> unit) ->                 (Format.formatter -> elt -> unit) ->                 Format.formatter -> t -> unit               val dump :                 (Format.formatter -> elt -> unit) ->                 Format.formatter -> t -> unit             end           type set = Odig.Cobj.Digest.Set.t           module Map :             sig               type key = t               type +'a t               val empty : 'a t               val is_empty : 'a t -> bool               val mem : key -> 'a t -> bool               val add : key -> '-> 'a t -> 'a t               val singleton : key -> '-> 'a t               val remove : key -> 'a t -> 'a t               val merge :                 (key -> 'a option -> 'b option -> 'c option) ->                 'a t -> 'b t -> 'c t               val union :                 (key -> '-> '-> 'a option) -> 'a t -> 'a t -> 'a t               val compare : ('-> '-> int) -> 'a t -> 'a t -> int               val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool               val iter : (key -> '-> unit) -> 'a t -> unit               val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b               val for_all : (key -> '-> bool) -> 'a t -> bool               val exists : (key -> '-> bool) -> 'a t -> bool               val filter : (key -> '-> bool) -> 'a t -> 'a t               val partition : (key -> '-> bool) -> 'a t -> 'a t * 'a t               val cardinal : 'a t -> int               val bindings : 'a t -> (key * 'a) list               val split : key -> 'a t -> 'a t * 'a option * 'a t               val map : ('-> 'b) -> 'a t -> 'b t               val mapi : (key -> '-> 'b) -> 'a t -> 'b t               val find : key -> 'a t -> 'a option               val get : key -> 'a t -> 'a               val min_binding : 'a t -> (key * 'a) option               val get_min_binding : 'a t -> key * 'a               val max_binding : 'a t -> (key * 'a) option               val get_max_binding : 'a t -> key * 'a               val choose : 'a t -> (key * 'a) option               val get_any_binding : 'a t -> key * 'a               val to_list : 'a t -> (key * 'a) list               val of_list : (key * 'a) list -> 'a t               val pp :                 ?sep:(Format.formatter -> unit -> unit) ->                 (Format.formatter -> key * '-> unit) ->                 Format.formatter -> 'a t -> unit               val dump :                 (Format.formatter -> key * '-> unit) ->                 Format.formatter -> 'a t -> unit               type key_set = Set.t               val dom : 'a t -> key_set             end           type 'a map = 'Odig.Cobj.Digest.Map.t         end       type digest = Odig.Cobj.Digest.t       type dep = string * Odig.Cobj.digest option       type mli       type cmi       type cmti       type ml       type cmo       type cmt       type cma       type cmx       type cmxa       type cmxs       module Mli :         sig           type t = Odig.Cobj.mli           val read :             Fpath.t -> (Odig.Cobj.mli, [ `Msg of string ]) Pervasives.result           val name : Odig.Cobj.mli -> string           val path : Odig.Cobj.mli -> Fpath.t         end       module Cmi :         sig           type t = Odig.Cobj.cmi           val read :             Fpath.t -> (Odig.Cobj.cmi, [ `Msg of string ]) Pervasives.result           val name : Odig.Cobj.cmi -> string           val digest : Odig.Cobj.cmi -> Odig.Cobj.digest           val deps : Odig.Cobj.cmi -> Odig.Cobj.dep list           val path : Odig.Cobj.cmi -> Fpath.t           val to_cmi_dep : Odig.Cobj.cmi -> Odig.Cobj.dep         end       module Cmti :         sig           type t = Odig.Cobj.cmti           val read :             Fpath.t -> (Odig.Cobj.cmti, [ `Msg of string ]) Pervasives.result           val name : Odig.Cobj.cmti -> string           val digest : Odig.Cobj.cmti -> Odig.Cobj.digest           val deps : Odig.Cobj.cmti -> Odig.Cobj.dep list           val path : Odig.Cobj.cmti -> Fpath.t           val to_cmi_dep : Odig.Cobj.cmti -> Odig.Cobj.dep         end       module Ml :         sig           type t = Odig.Cobj.ml           val read :             Fpath.t -> (Odig.Cobj.ml, [ `Msg of string ]) Pervasives.result           val name : Odig.Cobj.ml -> string           val path : Odig.Cobj.ml -> Fpath.t         end       module Cmo :         sig           type t = Odig.Cobj.cmo           val read :             Fpath.t -> (Odig.Cobj.cmo, [ `Msg of string ]) Pervasives.result           val name : Odig.Cobj.cmo -> string           val cmi_digest : Odig.Cobj.cmo -> Odig.Cobj.digest           val cmi_deps : Odig.Cobj.cmo -> Odig.Cobj.dep list           val cma : Odig.Cobj.cmo -> Odig.Cobj.cma option           val path : Odig.Cobj.cmo -> Fpath.t           val to_cmi_dep : Odig.Cobj.cmo -> Odig.Cobj.dep         end       module Cmt :         sig           type t = Odig.Cobj.cmt           val read :             Fpath.t -> (Odig.Cobj.cmt, [ `Msg of string ]) Pervasives.result           val name : Odig.Cobj.cmt -> string           val cmi_digest : Odig.Cobj.cmt -> Odig.Cobj.digest           val cmi_deps : Odig.Cobj.cmt -> Odig.Cobj.dep list           val path : Odig.Cobj.cmt -> Fpath.t         end       module Cma :         sig           type t = Odig.Cobj.cma           val read :             Fpath.t -> (Odig.Cobj.cma, [ `Msg of string ]) Pervasives.result           val name : Odig.Cobj.cma -> string           val cmos : Odig.Cobj.cma -> Odig.Cobj.cmo list           val custom : Odig.Cobj.cma -> bool           val custom_cobjs : Odig.Cobj.cma -> string list           val custom_copts : Odig.Cobj.cma -> string list           val dllibs : Odig.Cobj.cma -> string list           val path : Odig.Cobj.cma -> Fpath.t           val names :             ?init:Odig.Cobj.Digest.t Astring.String.map ->             Odig.Cobj.cma -> Odig.Cobj.Digest.t Astring.String.map           val cmi_digests :             ?init:string Odig.Cobj.Digest.map ->             Odig.Cobj.cma -> string Odig.Cobj.Digest.map           val to_cmi_deps :             ?init:Odig.Cobj.dep list -> Odig.Cobj.cma -> Odig.Cobj.dep list           val cmi_deps :             ?conflict:(string ->                        keep:Odig.Cobj.Digest.t -> Odig.Cobj.Digest.t -> unit) ->             Odig.Cobj.cma -> Odig.Cobj.dep list         end       module Cmx :         sig           type t = Odig.Cobj.cmx           val read :             Fpath.t -> (Odig.Cobj.cmx, [ `Msg of string ]) Pervasives.result           val name : Odig.Cobj.cmx -> string           val digest : Odig.Cobj.cmx -> Odig.Cobj.digest           val cmi_digest : Odig.Cobj.cmx -> Odig.Cobj.digest           val cmi_deps : Odig.Cobj.cmx -> Odig.Cobj.dep list           val cmx_deps : Odig.Cobj.cmx -> Odig.Cobj.dep list           val cmxa : Odig.Cobj.cmx -> Odig.Cobj.cmxa option           val path : Odig.Cobj.cmx -> Fpath.t           val to_cmi_dep : Odig.Cobj.cmx -> Odig.Cobj.dep         end       module Cmxa :         sig           type t = Odig.Cobj.cmxa           val read :             Fpath.t ->             (Odig.Cobj.Cmxa.t, [ `Msg of string ]) Pervasives.result           val name : Odig.Cobj.cmxa -> string           val cmxs : Odig.Cobj.cmxa -> Odig.Cobj.cmx list           val cobjs : Odig.Cobj.cmxa -> string list           val copts : Odig.Cobj.cmxa -> string list           val path : Odig.Cobj.cmxa -> Fpath.t           val names :             ?init:Odig.Cobj.Digest.t Astring.String.map ->             Odig.Cobj.cmxa -> Odig.Cobj.Digest.t Astring.String.map           val cmi_digests :             ?init:string Odig.Cobj.Digest.map ->             Odig.Cobj.cmxa -> string Odig.Cobj.Digest.map           val to_cmi_deps :             ?init:Odig.Cobj.dep list -> Odig.Cobj.cmxa -> Odig.Cobj.dep list           val cmi_deps :             ?conflict:(string ->                        keep:Odig.Cobj.Digest.t -> Odig.Cobj.Digest.t -> unit) ->             Odig.Cobj.cmxa -> Odig.Cobj.dep list         end       module Cmxs :         sig           type t = Odig.Cobj.cmxs           val read :             Fpath.t ->             (Odig.Cobj.Cmxs.t, [ `Msg of string ]) Pervasives.result           val name : Odig.Cobj.cmxs -> string           val path : Odig.Cobj.cmxs -> Fpath.t         end       type set       val empty_set : Odig.Cobj.set       val mlis : Odig.Cobj.set -> Odig.Cobj.mli list       val cmis : Odig.Cobj.set -> Odig.Cobj.cmi list       val cmtis : Odig.Cobj.set -> Odig.Cobj.cmti list       val mls : Odig.Cobj.set -> Odig.Cobj.ml list       val cmos : ?files:bool -> Odig.Cobj.set -> Odig.Cobj.cmo list       val cmts : Odig.Cobj.set -> Odig.Cobj.cmt list       val cmas : Odig.Cobj.set -> Odig.Cobj.cma list       val cmxs : ?files:bool -> Odig.Cobj.set -> Odig.Cobj.cmx list       val cmxas : Odig.Cobj.set -> Odig.Cobj.cmxa list       val cmxss : Odig.Cobj.set -> Odig.Cobj.cmxs list       val set_of_dir :         ?err:(Fpath.t -> ('a, [ `Msg of string ]) Pervasives.result -> unit) ->         Fpath.t -> Odig.Cobj.set       type 'a index       module Index :         sig           type 'a t = 'Odig.Cobj.index           val empty : 'Odig.Cobj.index           val of_set :             ?init:'Odig.Cobj.index ->             '-> Odig.Cobj.set -> 'Odig.Cobj.index           type query = [ `Digest of Odig.Cobj.digest | `Name of string ]           val query_of_dep : Odig.Cobj.dep -> Odig.Cobj.Index.query           val query :             'Odig.Cobj.Index.t ->             Odig.Cobj.Index.query ->             ('a * Odig.Cobj.cmi) list * ('a * Odig.Cobj.cmti) list *             ('a * Odig.Cobj.cmo) list * ('a * Odig.Cobj.cmx) list *             ('a * Odig.Cobj.cmt) list           val cmis_for_interface :             'Odig.Cobj.index ->             Odig.Cobj.Index.query -> ('a * Odig.Cobj.cmi) list           val cmtis_for_interface :             'Odig.Cobj.index ->             Odig.Cobj.Index.query -> ('a * Odig.Cobj.cmti) list           val cmos_for_interface :             'Odig.Cobj.index ->             Odig.Cobj.Index.query -> ('a * Odig.Cobj.cmo) list           val cmxs_for_interface :             'Odig.Cobj.index ->             Odig.Cobj.Index.query -> ('a * Odig.Cobj.cmx) list           val cmts_for_interface :             'Odig.Cobj.index ->             Odig.Cobj.Index.query -> ('a * Odig.Cobj.cmt) list         end       type ('a, 'o) dep_resolution =           [ `Amb of ('a * 'o) list | `None | `Some of 'a * 'o ]       type ('a, 'o) dep_resolver =           Odig.Cobj.dep ->           ('a * 'o) list -> ('a, 'o) Odig.Cobj.dep_resolution       val cmi_for_interface :         resolve:('a, Odig.Cobj.cmi) Odig.Cobj.dep_resolver ->         'Odig.Cobj.index ->         Odig.Cobj.dep -> ('a, Odig.Cobj.cmi) Odig.Cobj.dep_resolution       val cmo_for_interface :         resolve:('a, Odig.Cobj.cmo) Odig.Cobj.dep_resolver ->         'Odig.Cobj.index ->         Odig.Cobj.dep -> ('a, Odig.Cobj.cmo) Odig.Cobj.dep_resolution       val cmx_for_interface :         resolve:('a, Odig.Cobj.cmx) Odig.Cobj.dep_resolver ->         'Odig.Cobj.index ->         Odig.Cobj.dep -> ('a, Odig.Cobj.cmx) Odig.Cobj.dep_resolution       type ('a, 'o) dep_src = ('a * 'o) list       type ('a, 'o) rec_dep_resolution =           [ `Conflict of               string * ('a, 'o) Odig.Cobj.dep_src list Odig.Cobj.Digest.map           | `Resolved of ('a * 'o) * ('a, 'o) Odig.Cobj.dep_src           | `Unresolved of               Odig.Cobj.dep * [ `Amb of ('a * 'o) list | `None ] *               ('a, 'o) Odig.Cobj.dep_src ]       val pp_rec_dep_resolution :         ('a * 'o) Fmt.t -> ('a, 'o) Odig.Cobj.rec_dep_resolution Fmt.t       val rec_cmis_for_interfaces :         resolve:('a, Odig.Cobj.cmi) Odig.Cobj.dep_resolver ->         'Odig.Cobj.index ->         (Odig.Cobj.dep * ('a, Odig.Cobj.cmi) Odig.Cobj.dep_src) list ->         ('a, Odig.Cobj.cmi) Odig.Cobj.rec_dep_resolution Astring.String.map       val rec_cmos_for_interfaces :         resolve:('a, Odig.Cobj.cmo) Odig.Cobj.dep_resolver ->         'Odig.Cobj.index ->         (Odig.Cobj.dep * ('a, Odig.Cobj.cmo) Odig.Cobj.dep_src) list ->         ('a, Odig.Cobj.cmo) Odig.Cobj.rec_dep_resolution Astring.String.map       val fold_rec_dep_resolutions :         deps:('-> Odig.Cobj.dep list) ->         (string -> ('a, 'o) Odig.Cobj.rec_dep_resolution -> '-> 'b) ->         ('a, 'o) Odig.Cobj.rec_dep_resolution Astring.String.map -> '-> 'b     end   module Conf :     sig       type t       val default_file : Fpath.t       val v :         ?trust_cache:bool ->         cachedir:Fpath.t ->         libdir:Fpath.t ->         docdir:Fpath.t -> docdir_href:string option -> unit -> Odig.Conf.t       val with_conf :         ?trust_cache:bool ->         ?docdir_href:string option -> Odig.Conf.t -> Odig.Conf.t       val of_file :         ?trust_cache:bool ->         Fpath.t -> (Odig.Conf.t, [ `Msg of string ]) Pervasives.result       val of_opam_switch :         ?trust_cache:bool ->         ?switch:string ->         ?docdir_href:string ->         unit -> (Odig.Conf.t, [ `Msg of string ]) Pervasives.result       val libdir : Odig.Conf.t -> Fpath.t       val docdir : Odig.Conf.t -> Fpath.t       val docdir_href : Odig.Conf.t -> string option       val cachedir : Odig.Conf.t -> Fpath.t       val trust_cache : Odig.Conf.t -> bool       val clear_cache :         Odig.Conf.t -> (unit, [ `Msg of string ]) Pervasives.result       val pkg_cachedir : Odig.Conf.t -> Fpath.t       val cached_pkgs_names :         Odig.Conf.t ->         (Astring.String.set, [ `Msg of string ]) Pervasives.result     end   module Pkg :     sig       type name = string       val is_name : string -> bool       val name_of_string :         string -> (Odig.Pkg.name, [ `Msg of string ]) Pervasives.result       val dir_is_package : Fpath.t -> Odig.Pkg.name option       type t       type set       val set :         Odig.Conf.t -> (Odig.Pkg.set, [ `Msg of string ]) Pervasives.result       val conf_cobj_index :         Odig.Conf.t ->         ([ `Pkg of Odig.Pkg.t ] Odig.Cobj.Index.t, [ `Msg of string ])         Pervasives.result       val lookup :         Odig.Conf.t ->         Odig.Pkg.name -> (Odig.Pkg.t, [ `Msg of string ]) Pervasives.result       val find : Odig.Conf.t -> Odig.Pkg.name -> Odig.Pkg.t option       val find_set :         Odig.Conf.t ->         Astring.String.set -> Odig.Pkg.set * Astring.String.set       val field :         err:'->         (Odig.Pkg.t -> ('a, [ `Msg of string ]) Pervasives.result) ->         Odig.Pkg.t -> 'a       val name : Odig.Pkg.t -> Odig.Pkg.name       val libdir : Odig.Pkg.t -> Fpath.t       val docdir : Odig.Pkg.t -> Fpath.t       val cobjs : Odig.Pkg.t -> Odig.Cobj.set       val conf : Odig.Pkg.t -> Odig.Conf.t       val opam_file : Odig.Pkg.t -> Fpath.t       val opam_fields :         Odig.Pkg.t ->         (string list Astring.String.map, [ `Msg of string ])         Pervasives.result       val license_tags :         Odig.Pkg.t -> (string list, [ `Msg of string ]) Pervasives.result       val version :         Odig.Pkg.t -> (string option, [ `Msg of string ]) Pervasives.result       val homepage :         Odig.Pkg.t -> (string list, [ `Msg of string ]) Pervasives.result       val online_doc :         Odig.Pkg.t -> (string list, [ `Msg of string ]) Pervasives.result       val issues :         Odig.Pkg.t -> (string list, [ `Msg of string ]) Pervasives.result       val tags :         Odig.Pkg.t -> (string list, [ `Msg of string ]) Pervasives.result       val maintainers :         Odig.Pkg.t -> (string list, [ `Msg of string ]) Pervasives.result       val authors :         Odig.Pkg.t -> (string list, [ `Msg of string ]) Pervasives.result       val repo :         Odig.Pkg.t -> (string list, [ `Msg of string ]) Pervasives.result       val deps :         ?opts:bool ->         Odig.Pkg.t ->         (Astring.String.set, [ `Msg of string ]) Pervasives.result       val depopts :         Odig.Pkg.t ->         (Astring.String.set, [ `Msg of string ]) Pervasives.result       val readmes :         Odig.Pkg.t -> (Fpath.t list, [ `Msg of string ]) Pervasives.result       val change_logs :         Odig.Pkg.t -> (Fpath.t list, [ `Msg of string ]) Pervasives.result       val licenses :         Odig.Pkg.t -> (Fpath.t list, [ `Msg of string ]) Pervasives.result       val equal : Odig.Pkg.t -> Odig.Pkg.t -> bool       val compare : Odig.Pkg.t -> Odig.Pkg.t -> int       module Set :         sig           type elt = t           type t = set           val empty : t           val is_empty : t -> bool           val mem : elt -> t -> bool           val add : elt -> t -> t           val singleton : elt -> t           val remove : elt -> t -> t           val union : t -> t -> t           val inter : t -> t -> t           val diff : t -> t -> t           val compare : t -> t -> int           val equal : t -> t -> bool           val subset : t -> t -> bool           val iter : (elt -> unit) -> t -> unit           val fold : (elt -> '-> 'a) -> t -> '-> 'a           val for_all : (elt -> bool) -> t -> bool           val exists : (elt -> bool) -> t -> bool           val filter : (elt -> bool) -> t -> t           val partition : (elt -> bool) -> t -> t * t           val cardinal : t -> int           val elements : t -> elt list           val split : elt -> t -> t * bool * t           val find : elt -> t -> elt option           val get : elt -> t -> elt           val min_elt : t -> elt option           val get_min_elt : t -> elt           val max_elt : t -> elt option           val get_max_elt : t -> elt           val choose : t -> elt option           val get_any_elt : t -> elt           val to_list : t -> elt list           val of_list : elt list -> t           val pp :             ?sep:(Format.formatter -> unit -> unit) ->             (Format.formatter -> elt -> unit) ->             Format.formatter -> t -> unit           val dump :             (Format.formatter -> elt -> unit) ->             Format.formatter -> t -> unit         end       module Map :         sig           type key = t           type +'a t           val empty : 'a t           val is_empty : 'a t -> bool           val mem : key -> 'a t -> bool           val add : key -> '-> 'a t -> 'a t           val singleton : key -> '-> 'a t           val remove : key -> 'a t -> 'a t           val merge :             (key -> 'a option -> 'b option -> 'c option) ->             'a t -> 'b t -> 'c t           val union : (key -> '-> '-> 'a option) -> 'a t -> 'a t -> 'a t           val compare : ('-> '-> int) -> 'a t -> 'a t -> int           val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool           val iter : (key -> '-> unit) -> 'a t -> unit           val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b           val for_all : (key -> '-> bool) -> 'a t -> bool           val exists : (key -> '-> bool) -> 'a t -> bool           val filter : (key -> '-> bool) -> 'a t -> 'a t           val partition : (key -> '-> bool) -> 'a t -> 'a t * 'a t           val cardinal : 'a t -> int           val bindings : 'a t -> (key * 'a) list           val split : key -> 'a t -> 'a t * 'a option * 'a t           val map : ('-> 'b) -> 'a t -> 'b t           val mapi : (key -> '-> 'b) -> 'a t -> 'b t           val find : key -> 'a t -> 'a option           val get : key -> 'a t -> 'a           val min_binding : 'a t -> (key * 'a) option           val get_min_binding : 'a t -> key * 'a           val max_binding : 'a t -> (key * 'a) option           val get_max_binding : 'a t -> key * 'a           val choose : 'a t -> (key * 'a) option           val get_any_binding : 'a t -> key * 'a           val to_list : 'a t -> (key * 'a) list           val of_list : (key * 'a) list -> 'a t           val pp :             ?sep:(Format.formatter -> unit -> unit) ->             (Format.formatter -> key * '-> unit) ->             Format.formatter -> 'a t -> unit           val dump :             (Format.formatter -> key * '-> unit) ->             Format.formatter -> 'a t -> unit           type key_set = Set.t           val dom : 'a t -> key_set         end       val classify :         ?cmp:('-> '-> int) ->         classes:(Odig.Pkg.t -> 'a list) ->         Odig.Pkg.t list -> ('a * Odig.Pkg.Set.t) list       val cachedir : Odig.Pkg.t -> Fpath.t       type cache_status = [ `Fresh | `New | `Stale ]       val cache_status :         Odig.Pkg.t ->         (Odig.Pkg.cache_status, [ `Msg of string ]) Pervasives.result       val refresh_cache :         Odig.Pkg.t -> (unit, [ `Msg of string ]) Pervasives.result       val clear_cache :         Odig.Pkg.t -> (unit, [ `Msg of string ]) Pervasives.result     end   val load :     ?force:bool -> ?deps:bool -> ?init:bool -> ?dir:Fpath.t -> string -> unit   val load_libs :     ?force:bool -> ?deps:bool -> ?init:bool -> ?dir:Fpath.t -> unit -> unit   val load_pkg : ?force:bool -> ?deps:bool -> ?init:bool -> string -> unit   val status : unit -> unit   val reset : unit -> unit   val help : unit -> unit   module Odoc :     sig       val htmldir : Odig.Conf.t -> Odig.Pkg.t option -> Fpath.t       val compile :         odoc:Bos.Cmd.t ->         force:bool ->         Odig.Pkg.t -> (unit, [ `Msg of string ]) Pervasives.result       val html :         odoc:Bos.Cmd.t ->         force:bool ->         Odig.Pkg.t -> (unit, [ `Msg of string ]) Pervasives.result       val htmldir_css_and_index :         Odig.Conf.t -> (unit, [ `Msg of string ]) Pervasives.result     end   module Ocamldoc :     sig       val htmldir : Odig.Conf.t -> Odig.Pkg.t option -> Fpath.t       val compile :         ocamldoc:Bos.Cmd.t ->         force:bool ->         Odig.Pkg.t -> (unit, [ `Msg of string ]) Pervasives.result       val html :         ocamldoc:Bos.Cmd.t ->         force:bool ->         Odig.Pkg.t -> (unit, [ `Msg of string ]) Pervasives.result       val htmldir_css_and_index :         Odig.Conf.t -> (unit, [ `Msg of string ]) Pervasives.result     end   module Private :     sig       module Log :         sig           val src : Logs.src           val msg : Logs.level -> 'Logs.log           val app : 'Logs.log           val err : 'Logs.log           val warn : 'Logs.log           val info : 'Logs.log           val debug : 'Logs.log           val kmsg : (unit -> 'b) -> Logs.level -> ('a, 'b) Logs.msgf -> 'b           val on_error :             ?level:Logs.level ->             ?header:string ->             ?tags:Logs.Tag.set ->             pp:(Format.formatter -> '-> unit) ->             use:('-> 'a) -> ('a, 'b) Result.result -> 'a           val on_error_msg :             ?level:Logs.level ->             ?header:string ->             ?tags:Logs.Tag.set ->             use:(unit -> 'a) -> ('a, [ `Msg of string ]) Result.result -> 'a           val on_iter_error_msg :             ?level:Logs.level ->             ?header:string ->             ?tags:Logs.Tag.set ->             (('-> unit) -> '-> 'c) ->             ('-> (unit, [ `Msg of string ]) Pervasives.result) -> '-> 'c           val time :             ?level:Logs.level ->             ('->              (?tags:Logs.Tag.set ->               ('b, Format.formatter, unit, 'a) Pervasives.format4 -> 'b) ->              'a) ->             ('-> 'a) -> '-> 'a         end       module Top :         sig           val init : ?conf:Odig.Conf.t -> unit -> unit           val announce : unit -> unit         end       module Ocamltop :         sig           val add_inc :             Fpath.t -> (unit, [ `Msg of string ]) Pervasives.result           val rem_inc :             Fpath.t -> (unit, [ `Msg of string ]) Pervasives.result           val load_ml :             Fpath.t -> (unit, [ `Msg of string ]) Pervasives.result           val load_obj :             Fpath.t -> (unit, [ `Msg of string ]) Pervasives.result         end       module Json :         sig           type 'a seq           val empty : 'Odig.Private.Json.seq           val ( ++ ) :             'Odig.Private.Json.seq ->             'Odig.Private.Json.seq -> 'Odig.Private.Json.seq           type t           type mem           type el           val null : Odig.Private.Json.t           val bool : bool -> Odig.Private.Json.t           val int : int -> Odig.Private.Json.t           val str : string -> Odig.Private.Json.t           val el :             Odig.Private.Json.t -> Odig.Private.Json.el Odig.Private.Json.seq           val el_if :             bool ->             (unit -> Odig.Private.Json.t) ->             Odig.Private.Json.el Odig.Private.Json.seq           val arr :             Odig.Private.Json.el Odig.Private.Json.seq -> Odig.Private.Json.t           val mem :             string ->             Odig.Private.Json.t ->             Odig.Private.Json.mem Odig.Private.Json.seq           val mem_if :             bool ->             string ->             (unit -> Odig.Private.Json.t) ->             Odig.Private.Json.mem Odig.Private.Json.seq           val obj :             Odig.Private.Json.mem Odig.Private.Json.seq ->             Odig.Private.Json.t           val buffer_add : Buffer.t -> Odig.Private.Json.t -> unit           val to_string : Odig.Private.Json.t -> string           val output : Pervasives.out_channel -> Odig.Private.Json.t -> unit         end       module Html :         sig           type 'a seq           val empty : 'Odig.Private.Html.seq           val ( ++ ) :             'Odig.Private.Html.seq ->             'Odig.Private.Html.seq -> 'Odig.Private.Html.seq           type att           type attv           type t           val attv : string -> Odig.Private.Html.attv Odig.Private.Html.seq           val att :             string ->             Odig.Private.Html.attv Odig.Private.Html.seq ->             Odig.Private.Html.att Odig.Private.Html.seq           val data : string -> Odig.Private.Html.t Odig.Private.Html.seq           val el :             string ->             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val href : string -> Odig.Private.Html.att Odig.Private.Html.seq           val id : string -> Odig.Private.Html.att Odig.Private.Html.seq           val class_ : string -> Odig.Private.Html.att Odig.Private.Html.seq           val a :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val link :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             string ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val div :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val meta :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val nav :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val code :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val ul :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val ol :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val li :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val dl :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val dt :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val dd :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val p :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val h1 :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val h2 :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val span :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val body :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val html :             ?atts:Odig.Private.Html.att Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq ->             Odig.Private.Html.t Odig.Private.Html.seq           val buffer_add :             ?doc_type:bool ->             Buffer.t -> Odig.Private.Html.t Odig.Private.Html.seq -> unit           val to_string :             ?doc_type:bool ->             Odig.Private.Html.t Odig.Private.Html.seq -> string           val output :             ?doc_type:bool ->             Pervasives.out_channel ->             Odig.Private.Html.t Odig.Private.Html.seq -> unit         end       module Dot :         sig           type 'a seq           val empty : 'Odig.Private.Dot.seq           val ( ++ ) :             'Odig.Private.Dot.seq ->             'Odig.Private.Dot.seq -> 'Odig.Private.Dot.seq           type id = string           type st           type att           type t           val edge :             ?atts:Odig.Private.Dot.att Odig.Private.Dot.seq ->             Odig.Private.Dot.id ->             Odig.Private.Dot.id -> Odig.Private.Dot.st Odig.Private.Dot.seq           val node :             ?atts:Odig.Private.Dot.att Odig.Private.Dot.seq ->             Odig.Private.Dot.id -> Odig.Private.Dot.st Odig.Private.Dot.seq           val atts :             [ `Edge | `Graph | `Node ] ->             Odig.Private.Dot.att Odig.Private.Dot.seq ->             Odig.Private.Dot.st Odig.Private.Dot.seq           val att :             string -> string -> Odig.Private.Dot.att Odig.Private.Dot.seq           val label : string -> Odig.Private.Dot.att Odig.Private.Dot.seq           val color : string -> Odig.Private.Dot.att Odig.Private.Dot.seq           val subgraph :             ?id:Odig.Private.Dot.id ->             Odig.Private.Dot.st Odig.Private.Dot.seq ->             Odig.Private.Dot.st Odig.Private.Dot.seq           val graph :             ?id:Odig.Private.Dot.id ->             ?strict:bool ->             [ `Digraph | `Graph ] ->             Odig.Private.Dot.st Odig.Private.Dot.seq -> Odig.Private.Dot.t           val buffer_add : Buffer.t -> Odig.Private.Dot.t -> unit           val to_string : Odig.Private.Dot.t -> string           val output : Pervasives.out_channel -> Odig.Private.Dot.t -> unit         end       module Digest :         sig           type t = string           val compare : t -> t -> int           val equal : t -> t -> bool           val string : string -> t           val bytes : bytes -> t           val substring : string -> int -> int -> t           val subbytes : bytes -> int -> int -> t           external channel : in_channel -> int -> t = "caml_md5_chan"           val output : out_channel -> t -> unit           val input : in_channel -> t           val to_hex : t -> string           val from_hex : string -> t           val file : Fpath.t -> (t, [ `Msg of string ]) Pervasives.result           val mtimes :             Fpath.t list -> (t, [ `Msg of string ]) Pervasives.result         end       module Trail :         sig           type t           val pp_dot : root:Fpath.t -> Odig.Private.Trail.t Fmt.t           val pp_dot_universe : root:Fpath.t -> unit Fmt.t         end       module Pkg :         sig           type name = string           val is_name : string -> bool           val name_of_string : string -> (name, [ `Msg of string ]) result           val dir_is_package : Fpath.t -> name option           type t = Pkg.t           type set = Pkg.set           val set : Conf.t -> (set, [ `Msg of string ]) result           val conf_cobj_index :             Conf.t -> ([ `Pkg of t ] Cobj.Index.t, [ `Msg of string ]) result           val lookup : Conf.t -> name -> (t, [ `Msg of string ]) result           val find : Conf.t -> name -> t option           val find_set :             Conf.t -> Astring.String.set -> set * Astring.String.set           val field :             err:'-> (t -> ('a, [ `Msg of string ]) result) -> t -> 'a           val name : t -> name           val libdir : t -> Fpath.t           val docdir : t -> Fpath.t           val cobjs : t -> Cobj.set           val conf : t -> Conf.t           val opam_file : t -> Fpath.t           val opam_fields :             t -> (string list Astring.String.map, [ `Msg of string ]) result           val license_tags : t -> (string list, [ `Msg of string ]) result           val version : t -> (string option, [ `Msg of string ]) result           val homepage : t -> (string list, [ `Msg of string ]) result           val online_doc : t -> (string list, [ `Msg of string ]) result           val issues : t -> (string list, [ `Msg of string ]) result           val tags : t -> (string list, [ `Msg of string ]) result           val maintainers : t -> (string list, [ `Msg of string ]) result           val authors : t -> (string list, [ `Msg of string ]) result           val repo : t -> (string list, [ `Msg of string ]) result           val deps :             ?opts:bool ->             t -> (Astring.String.set, [ `Msg of string ]) result           val depopts : t -> (Astring.String.set, [ `Msg of string ]) result           val readmes : t -> (Fpath.t list, [ `Msg of string ]) result           val change_logs : t -> (Fpath.t list, [ `Msg of string ]) result           val licenses : t -> (Fpath.t list, [ `Msg of string ]) result           val equal : t -> t -> bool           val compare : t -> t -> int           module Set :             sig               type elt = Pkg.t               type t = Pkg.set               val empty : t               val is_empty : t -> bool               val mem : elt -> t -> bool               val add : elt -> t -> t               val singleton : elt -> t               val remove : elt -> t -> t               val union : t -> t -> t               val inter : t -> t -> t               val diff : t -> t -> t               val compare : t -> t -> int               val equal : t -> t -> bool               val subset : t -> t -> bool               val iter : (elt -> unit) -> t -> unit               val fold : (elt -> '-> 'a) -> t -> '-> 'a               val for_all : (elt -> bool) -> t -> bool               val exists : (elt -> bool) -> t -> bool               val filter : (elt -> bool) -> t -> t               val partition : (elt -> bool) -> t -> t * t               val cardinal : t -> int               val elements : t -> elt list               val split : elt -> t -> t * bool * t               val find : elt -> t -> elt option               val get : elt -> t -> elt               val min_elt : t -> elt option               val get_min_elt : t -> elt               val max_elt : t -> elt option               val get_max_elt : t -> elt               val choose : t -> elt option               val get_any_elt : t -> elt               val to_list : t -> elt list               val of_list : elt list -> t               val pp :                 ?sep:(Format.formatter -> unit -> unit) ->                 (Format.formatter -> elt -> unit) ->                 Format.formatter -> t -> unit               val dump :                 (Format.formatter -> elt -> unit) ->                 Format.formatter -> t -> unit             end           module Map :             sig               type key = Pkg.t               type 'a t = 'Pkg.Map.t               val empty : 'a t               val is_empty : 'a t -> bool               val mem : key -> 'a t -> bool               val add : key -> '-> 'a t -> 'a t               val singleton : key -> '-> 'a t               val remove : key -> 'a t -> 'a t               val merge :                 (key -> 'a option -> 'b option -> 'c option) ->                 'a t -> 'b t -> 'c t               val union :                 (key -> '-> '-> 'a option) -> 'a t -> 'a t -> 'a t               val compare : ('-> '-> int) -> 'a t -> 'a t -> int               val equal : ('-> '-> bool) -> 'a t -> 'a t -> bool               val iter : (key -> '-> unit) -> 'a t -> unit               val fold : (key -> '-> '-> 'b) -> 'a t -> '-> 'b               val for_all : (key -> '-> bool) -> 'a t -> bool               val exists : (key -> '-> bool) -> 'a t -> bool               val filter : (key -> '-> bool) -> 'a t -> 'a t               val partition : (key -> '-> bool) -> 'a t -> 'a t * 'a t               val cardinal : 'a t -> int               val bindings : 'a t -> (key * 'a) list               val split : key -> 'a t -> 'a t * 'a option * 'a t               val map : ('-> 'b) -> 'a t -> 'b t               val mapi : (key -> '-> 'b) -> 'a t -> 'b t               val find : key -> 'a t -> 'a option               val get : key -> 'a t -> 'a               val min_binding : 'a t -> (key * 'a) option               val get_min_binding : 'a t -> key * 'a               val max_binding : 'a t -> (key * 'a) option               val get_max_binding : 'a t -> key * 'a               val choose : 'a t -> (key * 'a) option               val get_any_binding : 'a t -> key * 'a               val to_list : 'a t -> (key * 'a) list               val of_list : (key * 'a) list -> 'a t               val pp :                 ?sep:(Format.formatter -> unit -> unit) ->                 (Format.formatter -> key * '-> unit) ->                 Format.formatter -> 'a t -> unit               val dump :                 (Format.formatter -> key * '-> unit) ->                 Format.formatter -> 'a t -> unit               type key_set = Pkg.Set.t               val dom : 'a t -> key_set             end           val classify :             ?cmp:('-> '-> int) ->             classes:(t -> 'a list) -> t list -> ('a * Set.t) list           val cachedir : t -> Fpath.t           type cache_status = [ `Fresh | `New | `Stale ]           val cache_status : t -> (cache_status, [ `Msg of string ]) result           val refresh_cache : t -> (unit, [ `Msg of string ]) result           val clear_cache : t -> (unit, [ `Msg of string ]) result           val cobjs_trail : t -> Odig.Private.Trail.t           val install_trail : t -> Odig.Private.Trail.t         end     end end