mirror of
https://github.com/simonmichael/hledger.git
synced 2024-12-28 21:02:04 +03:00
74 lines
1.8 KiB
Haskell
74 lines
1.8 KiB
Haskell
-- | Paper over some differences between megaparsec 5 and 6,
|
|
-- making it possible to write code that supports both.
|
|
|
|
{-# LANGUAGE CPP, FlexibleContexts #-}
|
|
|
|
module Text.Megaparsec.Compat (
|
|
module Text.Megaparsec
|
|
#if MIN_VERSION_megaparsec(6,0,0)
|
|
,module Text.Megaparsec.Char
|
|
#endif
|
|
,MPErr
|
|
,mptext
|
|
,mpMkPos
|
|
,mpUnPos
|
|
,mpMkParseError
|
|
)
|
|
where
|
|
|
|
import qualified Data.Set as S
|
|
import Data.Text
|
|
import Text.Megaparsec
|
|
|
|
#if MIN_VERSION_megaparsec(6,0,0)
|
|
|
|
import Text.Megaparsec.Char
|
|
import Data.List.NonEmpty (fromList)
|
|
import Data.Void (Void)
|
|
|
|
-- | A basic parse error type.
|
|
type MPErr = Void
|
|
|
|
-- | Make a simple parse error.
|
|
mpMkParseError :: FilePath -> String -> ParseError Char String
|
|
mpMkParseError f s = FancyError (fromList [initialPos f]) (S.singleton $ ErrorFail s)
|
|
|
|
-- | Make a Pos. With a negative argument, throws InvalidPosException (megaparsec >= 6)
|
|
-- or calls error (megaparsec < 6).
|
|
mpMkPos :: Int -> Pos
|
|
mpMkPos = mkPos
|
|
|
|
-- | Unmake a Pos.
|
|
mpUnPos :: Pos -> Int
|
|
mpUnPos = unPos
|
|
|
|
-- | Parse and return some Text.
|
|
mptext :: MonadParsec e Text m => Tokens Text -> m (Tokens Text)
|
|
mptext = string
|
|
|
|
#else
|
|
|
|
import Text.Megaparsec.Prim (MonadParsec)
|
|
|
|
-- | A basic parse error type.
|
|
type MPErr = Dec
|
|
|
|
-- | Make a simple parse error.
|
|
mpMkParseError :: FilePath -> String -> ParseError Char String
|
|
mpMkParseError f s = (mempty :: ParseError Char String){errorCustom = S.singleton $ f ++ ": " ++ s}
|
|
|
|
-- | Make a Pos. With a negative argument, throws InvalidPosException (megaparsec >= 6)
|
|
-- or calls error (megaparsec < 6).
|
|
mpMkPos :: Int -> Pos
|
|
mpMkPos = unsafePos . fromIntegral
|
|
|
|
-- | Unmake a Pos.
|
|
mpUnPos :: Pos -> Int
|
|
mpUnPos = fromIntegral . unPos
|
|
|
|
-- | Parse and return some Text.
|
|
mptext :: MonadParsec e Text m => Text -> m Text
|
|
mptext = fmap pack . string . unpack
|
|
|
|
#endif
|