From e821200c0742eafb8d24be497b29cf8af5d790dd Mon Sep 17 00:00:00 2001
From: John Ericson <Ericson2314@Yahoo.com>
Date: Sun, 30 Oct 2016 16:42:13 -0700
Subject: [PATCH] Steal `parseMaybeQuoted` helper for legacy parser

---
 Cabal/Distribution/ParseUtils.hs | 20 ++++++++++++--------
 1 file changed, 12 insertions(+), 8 deletions(-)

diff --git a/Cabal/Distribution/ParseUtils.hs b/Cabal/Distribution/ParseUtils.hs
index 15bccbfcf7..4c362238b9 100644
--- a/Cabal/Distribution/ParseUtils.hs
+++ b/Cabal/Distribution/ParseUtils.hs
@@ -19,6 +19,7 @@
 -- This module is meant to be local-only to Distribution...
 
 {-# OPTIONS_HADDOCK hide #-}
+{-# LANGUAGE Rank2Types #-}
 module Distribution.ParseUtils (
         LineNo, PError(..), PWarning(..), locatedErrorMsg, syntaxError, warning,
         runP, runE, ParseResult(..), catchParseError, parseFail, showPWarning,
@@ -611,7 +612,7 @@ ifelse (f:fs) = do fs' <- ifelse fs
 
 -- |parse a module name
 parseModuleNameQ :: ReadP r ModuleName
-parseModuleNameQ = parseQuoted parse <++ parse
+parseModuleNameQ = parseMaybeQuoted parse
 
 parseFilePathQ :: ReadP r FilePath
 parseFilePathQ = parseTokenQ
@@ -631,7 +632,7 @@ parseBuildTool = do name <- parseBuildToolNameQ
                     return $ Dependency name ver
 
 parseBuildToolNameQ :: ReadP r PackageName
-parseBuildToolNameQ = parseQuoted parseBuildToolName <++ parseBuildToolName
+parseBuildToolNameQ = parseMaybeQuoted parseBuildToolName
 
 -- like parsePackageName but accepts symbols in components
 parseBuildToolName :: ReadP r PackageName
@@ -652,15 +653,15 @@ parsePkgconfigDependency = do name <- munch1
                               return $ Dependency (mkPackageName name) ver
 
 parsePackageNameQ :: ReadP r PackageName
-parsePackageNameQ = parseQuoted parse <++ parse
+parsePackageNameQ = parseMaybeQuoted parse
 
 parseOptVersion :: ReadP r Version
-parseOptVersion = parseQuoted ver <++ ver
+parseOptVersion = parseMaybeQuoted ver
   where ver :: ReadP r Version
         ver = parse <++ return nullVersion
 
 parseTestedWithQ :: ReadP r (CompilerFlavor,VersionRange)
-parseTestedWithQ = parseQuoted tw <++ tw
+parseTestedWithQ = parseMaybeQuoted tw
   where
     tw :: ReadP r (CompilerFlavor,VersionRange)
     tw = do compiler <- parseCompilerFlavorCompat
@@ -668,7 +669,7 @@ parseTestedWithQ = parseQuoted tw <++ tw
             return (compiler,version)
 
 parseLicenseQ :: ReadP r License
-parseLicenseQ = parseQuoted parse <++ parse
+parseLicenseQ = parseMaybeQuoted parse
 
 -- urgh, we can't define optQuotes :: ReadP r a -> ReadP r a
 -- because the "compat" version of ReadP isn't quite powerful enough.  In
@@ -676,10 +677,10 @@ parseLicenseQ = parseQuoted parse <++ parse
 -- Hence the trick above to make 'lic' polymorphic.
 
 parseLanguageQ :: ReadP r Language
-parseLanguageQ = parseQuoted parse <++ parse
+parseLanguageQ = parseMaybeQuoted parse
 
 parseExtensionQ :: ReadP r Extension
-parseExtensionQ = parseQuoted parse <++ parse
+parseExtensionQ = parseMaybeQuoted parse
 
 parseHaskellString :: ReadP r String
 parseHaskellString = readS_to_P reads
@@ -711,5 +712,8 @@ parseOptCommaList = parseSepList (optional (ReadP.char ','))
 parseQuoted :: ReadP r a -> ReadP r a
 parseQuoted = between (ReadP.char '"') (ReadP.char '"')
 
+parseMaybeQuoted :: (forall r. ReadP r a) -> ReadP r' a
+parseMaybeQuoted p = parseQuoted p <++ p
+
 parseFreeText :: ReadP.ReadP s String
 parseFreeText = ReadP.munch (const True)
-- 
GitLab