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
 |