sig
  type 'f monad = {
    return : 'a. '-> ('a, 'f) Generic_util.App.T.app;
    bind :
      ''b.
        ('a, 'f) Generic_util.App.T.app ->
        ('-> ('b, 'f) Generic_util.App.T.app) ->
        ('b, 'f) Generic_util.App.T.app;
  }
end