functor (E : Eq->
  functor (M : Map.S-> sig type a = E.a M.t val eq : a -> a -> bool end