work on Reach monad