sig
  type 'b state = STATE
  type (_, _) Generic_util.App.T.app +=
      State :
        ('b -> 'a * 'b) -> ('a, 'b Generic_util_monad.State.state)
                           Generic_util.App.T.app
  val run_state :
    ('a, 'b Generic_util_monad.State.state) Generic_util.App.T.app ->
    'b -> 'a * 'b
  val state : 'a Generic_util_monad.State.state Generic_util_monad.monad
  val get : ('a, 'a Generic_util_monad.State.state) Generic_util.App.T.app
  val put :
    'a -> (unit, 'a Generic_util_monad.State.state) Generic_util.App.T.app
end