functor
  (G : G) (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