`sig
module type G =
sig
type t
module V : Sig.COMPARABLE
module E :
sig
type t
val dst : Fixpoint.G.E.t -> V.t
val src : Fixpoint.G.E.t -> V.t
end
val fold_vertex : (V.t -> 'a -> 'a) -> Fixpoint.G.t -> 'a -> 'a
val succ_e : Fixpoint.G.t -> V.t -> Fixpoint.G.E.t list
val pred_e : Fixpoint.G.t -> V.t -> Fixpoint.G.E.t list
val succ : Fixpoint.G.t -> V.t -> V.t list
val pred : Fixpoint.G.t -> V.t -> V.t list
end
type direction = Forward | Backward
module type Analysis =
sig
type data
type edge
type vertex
type g
val direction : Fixpoint.direction
val join :
Fixpoint.Analysis.data ->
Fixpoint.Analysis.data -> Fixpoint.Analysis.data
val equal : Fixpoint.Analysis.data -> Fixpoint.Analysis.data -> bool
val analyze :
Fixpoint.Analysis.edge ->
Fixpoint.Analysis.data -> Fixpoint.Analysis.data
end
module Make :
functor (G : G) ->
functor
(A : sig
type data
type edge = G.E.t
type vertex = G.V.t
type g = G.t
val direction : direction
val join : data -> data -> data
val equal : data -> data -> bool
val analyze : edge -> data -> data
end) ->
sig val analyze : (G.V.t -> A.data) -> A.g -> G.V.t -> A.data end
end`