direct monoid
value monad