26 lines
485 B
OCaml
26 lines
485 B
OCaml
open Stdune
|
|
|
|
module type Keys = sig
|
|
type t
|
|
type elt
|
|
val empty : t
|
|
val add : t -> elt -> t
|
|
val mem : t -> elt -> bool
|
|
end
|
|
|
|
module type S = sig
|
|
type key
|
|
|
|
(** Returns [Error cycle] in case the graph is not a DAG *)
|
|
val top_closure
|
|
: key:('a -> key)
|
|
-> deps:('a -> 'a list)
|
|
-> 'a list
|
|
-> ('a list, 'a list) result
|
|
end
|
|
|
|
module Int : S with type key := int
|
|
module String : S with type key := string
|
|
|
|
module Make(Keys : Keys) : S with type key := Keys.elt
|