myParser :: ReaderT ParserConfig Parser Result myParser = do cfg <- ask choice [ try $ runReaderT parserA cfg <|> parserB <|> parserC] parserA :: ReaderT ParserConfig Parser Result parserA = do cfg <- ask undefined