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