implemented par monad