reader monad outline