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