{-# LANGUAGE Trustworthy #-}{-# LANGUAGE NoImplicitPrelude #-}------------------------------------------------------------------------------- |-- Module : GHC.Internal.Text.ParserCombinators.ReadPrec-- Copyright : (c) The University of Glasgow 2002-- License : BSD-style (see the file libraries/base/LICENSE)---- Maintainer : libraries@haskell.org-- Stability : provisional-- Portability : non-portable (uses Text.ParserCombinators.ReadP)---- This library defines parser combinators for precedence parsing.-----------------------------------------------------------------------------moduleGHC.Internal.Text.ParserCombinators.ReadPrec (ReadPrec ,-- * PrecedencesPrec ,minPrec ,-- * Precedence operationslift ,prec ,step ,reset ,-- * Other operations-- | All are based directly on their similarly-named 'ReadP' counterparts.get ,look ,(+++) ,(<++) ,pfail ,choice ,-- * ConvertersreadPrec_to_P ,readP_to_Prec ,readPrec_to_S ,readS_to_Prec ,)whereimportGHC.Internal.Text.ParserCombinators.ReadP (ReadP ,ReadS ,readP_to_S ,readS_to_P )importqualifiedGHC.Internal.Text.ParserCombinators.ReadP asReadP(get ,look ,(+++) ,(<++) ,pfail )importGHC.Internal.Num (Num (..))importGHC.Internal.Base importGHC.Internal.Control.Monad.Fail -- ----------------------------------------------------------------------------- The readPrec typenewtypeReadPrec a =P (Prec ->ReadP a )-- Functor, Monad, MonadPlus-- | @since base-2.01instanceFunctor ReadPrec wherefmap :: forall a b. (a -> b) -> ReadPrec a -> ReadPrec b
fmap a -> b
h (P Prec -> ReadP a
f )=(Prec -> ReadP b) -> ReadPrec b
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
n ->(a -> b) -> ReadP a -> ReadP b
forall a b. (a -> b) -> ReadP a -> ReadP b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
fmap a -> b
h (Prec -> ReadP a
f Prec
n ))-- | @since base-4.6.0.0instanceApplicative ReadPrec wherepure :: forall a. a -> ReadPrec a
pure a
x =(Prec -> ReadP a) -> ReadPrec a
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
_->a -> ReadP a
forall a. a -> ReadP a
forall (f :: * -> *) a. Applicative f => a -> f a
pure a
x )<*> :: forall a b. ReadPrec (a -> b) -> ReadPrec a -> ReadPrec b
(<*>) =ReadPrec (a -> b) -> ReadPrec a -> ReadPrec b
forall (m :: * -> *) a b. Monad m => m (a -> b) -> m a -> m b
ap liftA2 :: forall a b c.
(a -> b -> c) -> ReadPrec a -> ReadPrec b -> ReadPrec c
liftA2 =(a -> b -> c) -> ReadPrec a -> ReadPrec b -> ReadPrec c
forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 -- | @since base-2.01instanceMonad ReadPrec whereP Prec -> ReadP a
f >>= :: forall a b. ReadPrec a -> (a -> ReadPrec b) -> ReadPrec b
>>= a -> ReadPrec b
k =(Prec -> ReadP b) -> ReadPrec b
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
n ->doa <-Prec -> ReadP a
f Prec
n ;letP f' =k a inf' n )-- | @since base-4.9.0.0instanceMonadFail ReadPrec wherefail :: forall a. String -> ReadPrec a
fail String
s =(Prec -> ReadP a) -> ReadPrec a
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
_->String -> ReadP a
forall a. String -> ReadP a
forall (m :: * -> *) a. MonadFail m => String -> m a
fail String
s )-- | @since base-2.01instanceMonadPlus ReadPrec -- | @since base-4.6.0.0instanceAlternative ReadPrec whereempty :: forall a. ReadPrec a
empty =ReadPrec a
forall a. ReadPrec a
pfail <|> :: forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
(<|>) =ReadPrec a -> ReadPrec a -> ReadPrec a
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
(+++) -- precedencestypePrec =Int minPrec ::Prec minPrec :: Prec
minPrec =Prec
0-- ----------------------------------------------------------------------------- Operations over ReadPreclift ::ReadP a ->ReadPrec a -- ^ Lift a precedence-insensitive 'ReadP' to a 'ReadPrec'.lift :: forall a. ReadP a -> ReadPrec a
lift ReadP a
m =(Prec -> ReadP a) -> ReadPrec a
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
_->ReadP a
m )step ::ReadPrec a ->ReadPrec a -- ^ Increases the precedence context by one.step :: forall a. ReadPrec a -> ReadPrec a
step (P Prec -> ReadP a
f )=(Prec -> ReadP a) -> ReadPrec a
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
n ->Prec -> ReadP a
f (Prec
n Prec -> Prec -> Prec
forall a. Num a => a -> a -> a
+ Prec
1))reset ::ReadPrec a ->ReadPrec a -- ^ Resets the precedence context to zero.reset :: forall a. ReadPrec a -> ReadPrec a
reset (P Prec -> ReadP a
f )=(Prec -> ReadP a) -> ReadPrec a
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
_->Prec -> ReadP a
f Prec
minPrec )prec ::Prec ->ReadPrec a ->ReadPrec a -- ^ @(prec n p)@ checks whether the precedence context is-- less than or equal to @n@, and---- * if not, fails---- * if so, parses @p@ in context @n@.prec :: forall a. Prec -> ReadPrec a -> ReadPrec a
prec Prec
n (P Prec -> ReadP a
f )=(Prec -> ReadP a) -> ReadPrec a
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
c ->ifPrec
c Prec -> Prec -> Bool
forall a. Ord a => a -> a -> Bool
<= Prec
n thenPrec -> ReadP a
f Prec
n elseReadP a
forall a. ReadP a
ReadP.pfail )-- ----------------------------------------------------------------------------- Derived operationsget ::ReadPrec Char -- ^ Consumes and returns the next character.-- Fails if there is no input left.get :: ReadPrec Char
get =ReadP Char -> ReadPrec Char
forall a. ReadP a -> ReadPrec a
lift ReadP Char
ReadP.get look ::ReadPrec String -- ^ Look-ahead: returns the part of the input that is left, without-- consuming it.look :: ReadPrec String
look =ReadP String -> ReadPrec String
forall a. ReadP a -> ReadPrec a
lift ReadP String
ReadP.look (+++) ::ReadPrec a ->ReadPrec a ->ReadPrec a -- ^ Symmetric choice.P Prec -> ReadP a
f1 +++ :: forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
+++ P Prec -> ReadP a
f2 =(Prec -> ReadP a) -> ReadPrec a
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
n ->Prec -> ReadP a
f1 Prec
n ReadP a -> ReadP a -> ReadP a
forall a. ReadP a -> ReadP a -> ReadP a
ReadP.+++ Prec -> ReadP a
f2 Prec
n )(<++) ::ReadPrec a ->ReadPrec a ->ReadPrec a -- ^ Local, exclusive, left-biased choice: If left parser-- locally produces any result at all, then right parser is-- not used.P Prec -> ReadP a
f1 <++ :: forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
<++ P Prec -> ReadP a
f2 =(Prec -> ReadP a) -> ReadPrec a
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
n ->Prec -> ReadP a
f1 Prec
n ReadP a -> ReadP a -> ReadP a
forall a. ReadP a -> ReadP a -> ReadP a
ReadP.<++ Prec -> ReadP a
f2 Prec
n )pfail ::ReadPrec a -- ^ Always fails.pfail :: forall a. ReadPrec a
pfail =ReadP a -> ReadPrec a
forall a. ReadP a -> ReadPrec a
lift ReadP a
forall a. ReadP a
ReadP.pfail choice ::[ReadPrec a ]->ReadPrec a -- ^ Combines all parsers in the specified list.choice :: forall a. [ReadPrec a] -> ReadPrec a
choice [ReadPrec a]
ps =(ReadPrec a -> ReadPrec a -> ReadPrec a)
-> ReadPrec a -> [ReadPrec a] -> ReadPrec a
forall a b. (a -> b -> b) -> b -> [a] -> b
foldr ReadPrec a -> ReadPrec a -> ReadPrec a
forall a. ReadPrec a -> ReadPrec a -> ReadPrec a
(+++) ReadPrec a
forall a. ReadPrec a
pfail [ReadPrec a]
ps -- ----------------------------------------------------------------------------- Converting between ReadPrec and ReadreadPrec_to_P ::ReadPrec a ->(Int ->ReadP a )readPrec_to_P :: forall a. ReadPrec a -> Prec -> ReadP a
readPrec_to_P (P Prec -> ReadP a
f )=Prec -> ReadP a
f readP_to_Prec ::(Int ->ReadP a )->ReadPrec a readP_to_Prec :: forall a. (Prec -> ReadP a) -> ReadPrec a
readP_to_Prec Prec -> ReadP a
f =(Prec -> ReadP a) -> ReadPrec a
forall a. (Prec -> ReadP a) -> ReadPrec a
P Prec -> ReadP a
f readPrec_to_S ::ReadPrec a ->(Int ->ReadS a )readPrec_to_S :: forall a. ReadPrec a -> Prec -> ReadS a
readPrec_to_S (P Prec -> ReadP a
f )Prec
n =ReadP a -> ReadS a
forall a. ReadP a -> ReadS a
readP_to_S (Prec -> ReadP a
f Prec
n )readS_to_Prec ::(Int ->ReadS a )->ReadPrec a readS_to_Prec :: forall a. (Prec -> ReadS a) -> ReadPrec a
readS_to_Prec Prec -> ReadS a
f =(Prec -> ReadP a) -> ReadPrec a
forall a. (Prec -> ReadP a) -> ReadPrec a
P (\Prec
n ->ReadS a -> ReadP a
forall a. ReadS a -> ReadP a
readS_to_P (Prec -> ReadS a
f Prec
n ))

AltStyle によって変換されたページ (->オリジナル) /