option monad outline