`type source`
`type binary`
`type 'a t`
`module Name : sig ... end`
`val get : string -> 'a t -> string`
`val has : string -> 'a t -> bool`
`val add : string -> string -> 'a t -> 'a t`
`val print : Stdlib.out_channel -> 'a t -> unit`
`val filter_print : string list -> Stdlib.out_channel -> 'a t -> unit`
`module Set : sig ... end`
`type _ kind =`

1. `| Source : source kind`
2. `| Binary : binary kind`

`val of_assoc : 'a kind -> string Core.StringMap.t -> 'a t`
`module Map : sig ... end`
`val build_depends : source t -> binary Name.t list`
`val binaries : source t -> binary Name.t list`
`type dependency = {`

1. `dep_name : string;`
2. `dep_version : (Types.comparison * string) option;`

`}`
`val dependencies : string -> 'a t -> dependency list`