-{-# OPTIONS -fno-implicit-prelude #-}
+{-# OPTIONS_GHC -fno-implicit-prelude #-}
-----------------------------------------------------------------------------
-- |
-- Module : Text.ParserCombinators.ReadPrec
--
-- Maintainer : libraries@haskell.org
-- Stability : provisional
--- Portability : portable
+-- Portability : non-portable (uses Text.ParserCombinators.ReadP)
--
-- This library defines parser combinators for precedence parsing.
get, -- :: ReadPrec Char
look, -- :: ReadPrec String
(+++), -- :: ReadPrec a -> ReadPrec a -> ReadPrec a
+ (<++), -- :: ReadPrec a -> ReadPrec a -> ReadPrec a
pfail, -- :: ReadPrec a
choice, -- :: [ReadPrec a] -> ReadPrec a
import Text.ParserCombinators.ReadP
( ReadP
+ , ReadS
, readP_to_S
, readS_to_P
)
import qualified Text.ParserCombinators.ReadP as ReadP
( get
, look
- , (+++)
+ , (+++), (<++)
, pfail
)
import Control.Monad( MonadPlus(..) )
+#ifdef __GLASGOW_HASKELL__
import GHC.Num( Num(..) )
import GHC.Base
+#endif
-- ---------------------------------------------------------------------------
-- The readPrec type
-- Operations over ReadPrec
lift :: ReadP a -> ReadPrec a
--- ^ Lift a predence-insensitive 'ReadP' to a 'ReadPrec'
+-- ^ Lift a precedence-insensitive 'ReadP' to a 'ReadPrec'
lift m = P (\_ -> m)
step :: ReadPrec a -> ReadPrec a
(+++) :: ReadPrec a -> ReadPrec a -> ReadPrec a
P f1 +++ P f2 = P (\n -> f1 n ReadP.+++ f2 n)
+(<++) :: ReadPrec a -> ReadPrec a -> ReadPrec a
+P f1 <++ P f2 = P (\n -> f1 n ReadP.<++ f2 n)
+
pfail :: ReadPrec a
pfail = lift ReadP.pfail
-- ---------------------------------------------------------------------------
-- Converting between ReadPrec and Read
--- We define a local version of ReadS here,
--- because its "real" definition site is in GHC.Read
-type ReadS a = String -> [(a,String)]
-
readPrec_to_P :: ReadPrec a -> (Int -> ReadP a)
readPrec_to_P (P f) = f