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   val pp_dep : Odig.Cobj.dep Fmt.t   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 :     ?cmo_deps:(Odig.Cobj.cmo -> Odig.Cobj.dep list) ->     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