From 0d2011d04fd06fc6bb21407d2f412439668b6249 Mon Sep 17 00:00:00 2001 From: Daniel Gröber Date: Sat, 15 Dec 2018 23:18:41 +0100 Subject: Sync with Cabal HEAD --- src/CabalHelper/Compiletime/Compat/Parsec.hs | 41 ++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 src/CabalHelper/Compiletime/Compat/Parsec.hs (limited to 'src/CabalHelper/Compiletime/Compat') diff --git a/src/CabalHelper/Compiletime/Compat/Parsec.hs b/src/CabalHelper/Compiletime/Compat/Parsec.hs new file mode 100644 index 0000000..cab877a --- /dev/null +++ b/src/CabalHelper/Compiletime/Compat/Parsec.hs @@ -0,0 +1,41 @@ +-- cabal-helper: Simple interface to Cabal's configuration state +-- Copyright (C) 2018 Daniel Gröber +-- +-- This program is free software: you can redistribute it and/or modify +-- it under the terms of the GNU General Public License as published by +-- the Free Software Foundation, either version 3 of the License, or +-- (at your option) any later version. +-- +-- This program is distributed in the hope that it will be useful, +-- but WITHOUT ANY WARRANTY; without even the implied warranty of +-- MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +-- GNU General Public License for more details. +-- +-- You should have received a copy of the GNU General Public License +-- along with this program. If not, see . + +{-# LANGUAGE CPP #-} +module CabalHelper.Compiletime.Compat.Parsec + ( absorbParsecFailure + , eitherParsec + ) where + +#if MIN_VERSION_Cabal(2,5,0) +import Distribution.Parsec.Class +#else +import qualified Distribution.Compat.ReadP as Dist +import Distribution.Text +#endif + +absorbParsecFailure :: String -> Either String a -> a +absorbParsecFailure _ (Right x) = x +absorbParsecFailure ctx (Left err) = + error $ "Error parsing in '"++ctx++"': " ++ 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 -- cgit v1.2.3