functor (W : Weak.S) ->
  functor (G : sig type g = W.data val g : g t end) ->
    sig val gen : int Generator.t -> W.t Generator.t end