{-# LANGUAGE CPP #-}
module CabalHelper.Compiletime.Compat.Parsec
( absorbParsecFailure
, eitherParsec
) where
#if MIN_VERSION_Cabal(2,5,0)
import Distribution.Parsec
#else
import qualified Distribution.Compat.ReadP as Dist
import Distribution.Text
#endif
absorbParsecFailure :: String -> Either String a -> a
absorbParsecFailure :: String -> Either String a -> a
absorbParsecFailure _ (Right x :: a
x) = a
x
absorbParsecFailure ctx :: String
ctx (Left err :: String
err) =
String -> a
forall a. HasCallStack => String -> a
error (String -> a) -> String -> a
forall a b. (a -> b) -> a -> b
$ "Error parsing in '"String -> String -> String
forall a. [a] -> [a] -> [a]
++String
ctxString -> String -> String
forall a. [a] -> [a] -> [a]
++"': " String -> String -> String
forall a. [a] -> [a] -> [a]
++ String
err
#if !MIN_VERSION_Cabal(2,5,0)
eitherParsec :: Text t => String -> Either String t
eitherParsec i =
case filter ((=="") . snd) $ Dist.readP_to_S parse i of
(a,""):[] -> Right a
_ -> Left $ show i
#endif