{-# LANGUAGE CPP #-}
{-# LANGUAGE GADTs #-}
module Distribution.Deprecated.ReadP
(
ReadP,
get,
look,
(+++),
(<++),
gather,
pfail,
eof,
satisfy,
char,
string,
munch,
munch1,
skipSpaces,
skipSpaces1,
choice,
count,
between,
option,
optional,
many,
many1,
skipMany,
skipMany1,
sepBy,
sepBy1,
endBy,
endBy1,
chainr,
chainl,
chainl1,
chainr1,
manyTill,
ReadS,
readP_to_S,
readS_to_P,
readP_to_E,
Parser,
)
where
import Prelude ()
import Distribution.Client.Compat.Prelude hiding (many, get)
import Control.Monad( replicateM, (>=>) )
import qualified Control.Monad.Fail as Fail
import Distribution.ReadE (ReadE (..))
infixr 5 +++, <++
data P s a
= Get (s -> P s a)
| Look ([s] -> P s a)
| Fail
| Result a (P s a)
| Final [(a,[s])]
instance Functor (P s) where
fmap :: forall a b. (a -> b) -> P s a -> P s b
fmap = forall (m :: * -> *) a1 r. Monad m => (a1 -> r) -> m a1 -> m r
liftM
instance Applicative (P s) where
pure :: forall a. a -> P s a
pure a
x = forall s a. a -> P s a -> P s a
Result a
x forall s a. P s a
Fail
<*> :: forall a b. P s (a -> b) -> P s a -> P s b
(<*>) = forall (m :: * -> *) a b. Monad m => m (a -> b) -> m a -> m b
ap
instance Monad (P s) where
return :: forall a. a -> P s a
return = forall (f :: * -> *) a. Applicative f => a -> f a
pure
(Get s -> P s a
f) >>= :: forall a b. P s a -> (a -> P s b) -> P s b
>>= a -> P s b
k = forall s a. (s -> P s a) -> P s a
Get (s -> P s a
f forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> a -> P s b
k)
(Look [s] -> P s a
f) >>= a -> P s b
k = forall s a. ([s] -> P s a) -> P s a
Look ([s] -> P s a
f forall (m :: * -> *) a b c.
Monad m =>
(a -> m b) -> (b -> m c) -> a -> m c
>=> a -> P s b
k)
P s a
Fail >>= a -> P s b
_ = forall s a. P s a
Fail
(Result a
x P s a
p) >>= a -> P s b
k = a -> P s b
k a
x forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` (P s a
p forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= a -> P s b
k)
(Final [(a, [s])]
r) >>= a -> P s b
k = forall a s. [(a, [s])] -> P s a
final [(b, [s])
ys' | (a
x,[s]
s) <- [(a, [s])]
r, (b, [s])
ys' <- forall c a. P c a -> [c] -> [(a, [c])]
run (a -> P s b
k a
x) [s]
s]
#if !(MIN_VERSION_base(4,9,0))
fail _ = Fail
#elif !(MIN_VERSION_base(4,13,0))
fail = Fail.fail
#endif
instance Fail.MonadFail (P s) where
fail :: forall a. String -> P s a
fail String
_ = forall s a. P s a
Fail
instance Alternative (P s) where
empty :: forall a. P s a
empty = forall (m :: * -> *) a. MonadPlus m => m a
mzero
<|> :: forall a. P s a -> P s a -> P s a
(<|>) = forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
mplus
instance MonadPlus (P s) where
mzero :: forall a. P s a
mzero = forall s a. P s a
Fail
Get s -> P s a
f1 mplus :: forall a. P s a -> P s a -> P s a
`mplus` Get s -> P s a
f2 = forall s a. (s -> P s a) -> P s a
Get (\s
c -> s -> P s a
f1 s
c forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` s -> P s a
f2 s
c)
Result a
x P s a
p `mplus` P s a
q = forall s a. a -> P s a -> P s a
Result a
x (P s a
p forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` P s a
q)
P s a
p `mplus` Result a
x P s a
q = forall s a. a -> P s a -> P s a
Result a
x (P s a
p forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` P s a
q)
P s a
Fail `mplus` P s a
p = P s a
p
P s a
p `mplus` P s a
Fail = P s a
p
Final [(a, [s])]
r `mplus` Final [(a, [s])]
t = forall s a. [(a, [s])] -> P s a
Final ([(a, [s])]
r forall a. [a] -> [a] -> [a]
++ [(a, [s])]
t)
Final [(a, [s])]
r `mplus` Look [s] -> P s a
f = forall s a. ([s] -> P s a) -> P s a
Look (\[s]
s -> forall s a. [(a, [s])] -> P s a
Final ([(a, [s])]
r forall a. [a] -> [a] -> [a]
++ forall c a. P c a -> [c] -> [(a, [c])]
run ([s] -> P s a
f [s]
s) [s]
s))
Final [(a, [s])]
r `mplus` P s a
p = forall s a. ([s] -> P s a) -> P s a
Look (\[s]
s -> forall s a. [(a, [s])] -> P s a
Final ([(a, [s])]
r forall a. [a] -> [a] -> [a]
++ forall c a. P c a -> [c] -> [(a, [c])]
run P s a
p [s]
s))
Look [s] -> P s a
f `mplus` Final [(a, [s])]
r = forall s a. ([s] -> P s a) -> P s a
Look (\[s]
s -> forall s a. [(a, [s])] -> P s a
Final (forall c a. P c a -> [c] -> [(a, [c])]
run ([s] -> P s a
f [s]
s) [s]
s forall a. [a] -> [a] -> [a]
++ [(a, [s])]
r))
P s a
p `mplus` Final [(a, [s])]
r = forall s a. ([s] -> P s a) -> P s a
Look (\[s]
s -> forall s a. [(a, [s])] -> P s a
Final (forall c a. P c a -> [c] -> [(a, [c])]
run P s a
p [s]
s forall a. [a] -> [a] -> [a]
++ [(a, [s])]
r))
Look [s] -> P s a
f `mplus` Look [s] -> P s a
g = forall s a. ([s] -> P s a) -> P s a
Look (\[s]
s -> [s] -> P s a
f [s]
s forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` [s] -> P s a
g [s]
s)
Look [s] -> P s a
f `mplus` P s a
p = forall s a. ([s] -> P s a) -> P s a
Look (\[s]
s -> [s] -> P s a
f [s]
s forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` P s a
p)
P s a
p `mplus` Look [s] -> P s a
f = forall s a. ([s] -> P s a) -> P s a
Look (\[s]
s -> P s a
p forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` [s] -> P s a
f [s]
s)
newtype Parser r s a = R ((a -> P s r) -> P s r)
type ReadP r a = Parser r Char a
instance Functor (Parser r s) where
fmap :: forall a b. (a -> b) -> Parser r s a -> Parser r s b
fmap a -> b
h (R (a -> P s r) -> P s r
f) = forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R (\b -> P s r
k -> (a -> P s r) -> P s r
f (b -> P s r
k forall b c a. (b -> c) -> (a -> b) -> a -> c
. a -> b
h))
instance Applicative (Parser r s) where
pure :: forall a. a -> Parser r s a
pure a
x = forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R (\a -> P s r
k -> a -> P s r
k a
x)
<*> :: forall a b. Parser r s (a -> b) -> Parser r s a -> Parser r s b
(<*>) = forall (m :: * -> *) a b. Monad m => m (a -> b) -> m a -> m b
ap
instance s ~ Char => Alternative (Parser r s) where
empty :: forall a. Parser r s a
empty = forall r a. ReadP r a
pfail
<|> :: forall a. Parser r s a -> Parser r s a -> Parser r s a
(<|>) = forall r a. ReadP r a -> ReadP r a -> ReadP r a
(+++)
instance Monad (Parser r s) where
return :: forall a. a -> Parser r s a
return = forall (f :: * -> *) a. Applicative f => a -> f a
pure
R (a -> P s r) -> P s r
m >>= :: forall a b. Parser r s a -> (a -> Parser r s b) -> Parser r s b
>>= a -> Parser r s b
f = forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R (\b -> P s r
k -> (a -> P s r) -> P s r
m (\a
a -> let R (b -> P s r) -> P s r
m' = a -> Parser r s b
f a
a in (b -> P s r) -> P s r
m' b -> P s r
k))
#if !(MIN_VERSION_base(4,9,0))
fail _ = R (const Fail)
#elif !(MIN_VERSION_base(4,13,0))
fail = Fail.fail
#endif
instance Fail.MonadFail (Parser r s) where
fail :: forall a. String -> Parser r s a
fail String
_ = forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R (forall a b. a -> b -> a
const forall s a. P s a
Fail)
instance s ~ Char => MonadPlus (Parser r s) where
mzero :: forall a. Parser r s a
mzero = forall r a. ReadP r a
pfail
mplus :: forall a. Parser r s a -> Parser r s a -> Parser r s a
mplus = forall r a. ReadP r a -> ReadP r a -> ReadP r a
(+++)
final :: [(a,[s])] -> P s a
final :: forall a s. [(a, [s])] -> P s a
final [] = forall s a. P s a
Fail
final [(a, [s])]
r = forall s a. [(a, [s])] -> P s a
Final [(a, [s])]
r
run :: P c a -> ([c] -> [(a, [c])])
run :: forall c a. P c a -> [c] -> [(a, [c])]
run (Get c -> P c a
f) (c
c:[c]
s) = forall c a. P c a -> [c] -> [(a, [c])]
run (c -> P c a
f c
c) [c]
s
run (Look [c] -> P c a
f) [c]
s = forall c a. P c a -> [c] -> [(a, [c])]
run ([c] -> P c a
f [c]
s) [c]
s
run (Result a
x P c a
p) [c]
s = (a
x,[c]
s) forall a. a -> [a] -> [a]
: forall c a. P c a -> [c] -> [(a, [c])]
run P c a
p [c]
s
run (Final [(a, [c])]
r) [c]
_ = [(a, [c])]
r
run P c a
_ [c]
_ = []
get :: ReadP r Char
get :: forall r. ReadP r Char
get = forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R forall s a. (s -> P s a) -> P s a
Get
look :: ReadP r String
look :: forall r. ReadP r String
look = forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R forall s a. ([s] -> P s a) -> P s a
Look
pfail :: ReadP r a
pfail :: forall r a. ReadP r a
pfail = forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R (forall a b. a -> b -> a
const forall s a. P s a
Fail)
eof :: ReadP r ()
eof :: forall r. ReadP r ()
eof = do { String
s <- forall r. ReadP r String
look
; if forall (t :: * -> *) a. Foldable t => t a -> Bool
null String
s then forall (m :: * -> *) a. Monad m => a -> m a
return ()
else forall r a. ReadP r a
pfail }
(+++) :: ReadP r a -> ReadP r a -> ReadP r a
R (a -> P Char r) -> P Char r
f1 +++ :: forall r a. ReadP r a -> ReadP r a -> ReadP r a
+++ R (a -> P Char r) -> P Char r
f2 = forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R (\a -> P Char r
k -> (a -> P Char r) -> P Char r
f1 a -> P Char r
k forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` (a -> P Char r) -> P Char r
f2 a -> P Char r
k)
(<++) :: ReadP a a -> ReadP r a -> ReadP r a
R (a -> P Char a) -> P Char a
f <++ :: forall a r. ReadP a a -> ReadP r a -> ReadP r a
<++ ReadP r a
q =
do String
s <- forall r. ReadP r String
look
P Char a -> String -> Int -> ReadP r a
probe ((a -> P Char a) -> P Char a
f forall (m :: * -> *) a. Monad m => a -> m a
return) String
s Int
0
where
probe :: P Char a -> String -> Int -> ReadP r a
probe (Get Char -> P Char a
f') (Char
c:String
s) Int
n = P Char a -> String -> Int -> ReadP r a
probe (Char -> P Char a
f' Char
c) String
s (Int
nforall a. Num a => a -> a -> a
+Int
1 :: Int)
probe (Look String -> P Char a
f') String
s Int
n = P Char a -> String -> Int -> ReadP r a
probe (String -> P Char a
f' String
s) String
s Int
n
probe p :: P Char a
p@(Result a
_ P Char a
_) String
_ Int
n = forall {r}. Int -> Parser r Char ()
discard Int
n forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R (P Char a
p forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=)
probe (Final [(a, String)]
r) String
_ Int
_ = forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R (forall s a. [(a, [s])] -> P s a
Final [(a, String)]
r forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>=)
probe P Char a
_ String
_ Int
_ = ReadP r a
q
discard :: Int -> Parser r Char ()
discard Int
0 = forall (m :: * -> *) a. Monad m => a -> m a
return ()
discard Int
n = forall r. ReadP r Char
get forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> Int -> Parser r Char ()
discard (Int
nforall a. Num a => a -> a -> a
-Int
1 :: Int)
gather :: ReadP (String -> P Char r) a -> ReadP r (String, a)
gather :: forall r a. ReadP (String -> P Char r) a -> ReadP r (String, a)
gather (R (a -> P Char (String -> P Char r)) -> P Char (String -> P Char r)
m) =
forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R (\(String, a) -> P Char r
k -> forall {s} {t} {a}. ([s] -> t) -> P s (t -> P s a) -> P s a
gath forall a. a -> a
id ((a -> P Char (String -> P Char r)) -> P Char (String -> P Char r)
m (\a
a -> forall (m :: * -> *) a. Monad m => a -> m a
return (\String
s -> (String, a) -> P Char r
k (String
s,a
a)))))
where
gath :: ([s] -> t) -> P s (t -> P s a) -> P s a
gath [s] -> t
l (Get s -> P s (t -> P s a)
f) = forall s a. (s -> P s a) -> P s a
Get (\s
c -> ([s] -> t) -> P s (t -> P s a) -> P s a
gath ([s] -> t
lforall b c a. (b -> c) -> (a -> b) -> a -> c
.(s
cforall a. a -> [a] -> [a]
:)) (s -> P s (t -> P s a)
f s
c))
gath [s] -> t
_ P s (t -> P s a)
Fail = forall s a. P s a
Fail
gath [s] -> t
l (Look [s] -> P s (t -> P s a)
f) = forall s a. ([s] -> P s a) -> P s a
Look (([s] -> t) -> P s (t -> P s a) -> P s a
gath [s] -> t
l forall b c a. (b -> c) -> (a -> b) -> a -> c
. [s] -> P s (t -> P s a)
f)
gath [s] -> t
l (Result t -> P s a
k P s (t -> P s a)
p) = t -> P s a
k ([s] -> t
l []) forall (m :: * -> *) a. MonadPlus m => m a -> m a -> m a
`mplus` ([s] -> t) -> P s (t -> P s a) -> P s a
gath [s] -> t
l P s (t -> P s a)
p
gath [s] -> t
_ (Final [(t -> P s a, [s])]
_) = forall a. HasCallStack => String -> a
error String
"do not use readS_to_P in gather!"
satisfy :: (Char -> Bool) -> ReadP r Char
satisfy :: forall r. (Char -> Bool) -> ReadP r Char
satisfy Char -> Bool
p = do Char
c <- forall r. ReadP r Char
get; if Char -> Bool
p Char
c then forall (m :: * -> *) a. Monad m => a -> m a
return Char
c else forall r a. ReadP r a
pfail
char :: Char -> ReadP r Char
char :: forall r. Char -> ReadP r Char
char Char
c = forall r. (Char -> Bool) -> ReadP r Char
satisfy (Char
c forall a. Eq a => a -> a -> Bool
==)
string :: String -> ReadP r String
string :: forall r. String -> ReadP r String
string String
this = do String
s <- forall r. ReadP r String
look; String -> String -> ReadP r String
scan String
this String
s
where
scan :: String -> String -> ReadP r String
scan [] String
_ = forall (m :: * -> *) a. Monad m => a -> m a
return String
this
scan (Char
x:String
xs) (Char
y:String
ys) | Char
x forall a. Eq a => a -> a -> Bool
== Char
y = forall r. ReadP r Char
get forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> String -> String -> ReadP r String
scan String
xs String
ys
scan String
_ String
_ = forall r a. ReadP r a
pfail
munch :: (Char -> Bool) -> ReadP r String
munch :: forall r. (Char -> Bool) -> ReadP r String
munch Char -> Bool
p =
do String
s <- forall r. ReadP r String
look
String -> ReadP r String
scan String
s
where
scan :: String -> ReadP r String
scan (Char
c:String
cs) | Char -> Bool
p Char
c = do Char
_ <- forall r. ReadP r Char
get; String
s <- String -> ReadP r String
scan String
cs; forall (m :: * -> *) a. Monad m => a -> m a
return (Char
cforall a. a -> [a] -> [a]
:String
s)
scan String
_ = do forall (m :: * -> *) a. Monad m => a -> m a
return String
""
munch1 :: (Char -> Bool) -> ReadP r String
munch1 :: forall r. (Char -> Bool) -> ReadP r String
munch1 Char -> Bool
p =
do Char
c <- forall r. ReadP r Char
get
if Char -> Bool
p Char
c then do String
s <- forall r. (Char -> Bool) -> ReadP r String
munch Char -> Bool
p; forall (m :: * -> *) a. Monad m => a -> m a
return (Char
cforall a. a -> [a] -> [a]
:String
s)
else forall r a. ReadP r a
pfail
choice :: [ReadP r a] -> ReadP r a
choice :: forall r a. [ReadP r a] -> ReadP r a
choice [] = forall r a. ReadP r a
pfail
choice [ReadP r a
p] = ReadP r a
p
choice (ReadP r a
p:[ReadP r a]
ps) = ReadP r a
p forall r a. ReadP r a -> ReadP r a -> ReadP r a
+++ forall r a. [ReadP r a] -> ReadP r a
choice [ReadP r a]
ps
skipSpaces :: ReadP r ()
skipSpaces :: forall r. ReadP r ()
skipSpaces =
do String
s <- forall r. ReadP r String
look
forall {r}. String -> Parser r Char ()
skip String
s
where
skip :: String -> Parser r Char ()
skip (Char
c:String
s) | Char -> Bool
isSpace Char
c = do Char
_ <- forall r. ReadP r Char
get; String -> Parser r Char ()
skip String
s
skip String
_ = do forall (m :: * -> *) a. Monad m => a -> m a
return ()
skipSpaces1 :: ReadP r ()
skipSpaces1 :: forall r. ReadP r ()
skipSpaces1 = forall r. (Char -> Bool) -> ReadP r Char
satisfy Char -> Bool
isSpace forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall r. ReadP r ()
skipSpaces
count :: Int -> ReadP r a -> ReadP r [a]
count :: forall r a. Int -> ReadP r a -> ReadP r [a]
count Int
n ReadP r a
p = forall (m :: * -> *) a. Applicative m => Int -> m a -> m [a]
replicateM Int
n ReadP r a
p
between :: ReadP r open -> ReadP r close -> ReadP r a -> ReadP r a
between :: forall r open close a.
ReadP r open -> ReadP r close -> ReadP r a -> ReadP r a
between ReadP r open
open ReadP r close
close ReadP r a
p = do open
_ <- ReadP r open
open
a
x <- ReadP r a
p
close
_ <- ReadP r close
close
forall (m :: * -> *) a. Monad m => a -> m a
return a
x
option :: a -> ReadP r a -> ReadP r a
option :: forall a r. a -> ReadP r a -> ReadP r a
option a
x ReadP r a
p = ReadP r a
p forall r a. ReadP r a -> ReadP r a -> ReadP r a
+++ forall (m :: * -> *) a. Monad m => a -> m a
return a
x
optional :: ReadP r a -> ReadP r ()
optional :: forall r a. ReadP r a -> ReadP r ()
optional ReadP r a
p = (ReadP r a
p forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall (m :: * -> *) a. Monad m => a -> m a
return ()) forall r a. ReadP r a -> ReadP r a -> ReadP r a
+++ forall (m :: * -> *) a. Monad m => a -> m a
return ()
many :: ReadP r a -> ReadP r [a]
many :: forall r a. ReadP r a -> ReadP r [a]
many ReadP r a
p = forall (m :: * -> *) a. Monad m => a -> m a
return [] forall r a. ReadP r a -> ReadP r a -> ReadP r a
+++ forall r a. ReadP r a -> ReadP r [a]
many1 ReadP r a
p
many1 :: ReadP r a -> ReadP r [a]
many1 :: forall r a. ReadP r a -> ReadP r [a]
many1 ReadP r a
p = forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 (:) ReadP r a
p (forall r a. ReadP r a -> ReadP r [a]
many ReadP r a
p)
skipMany :: ReadP r a -> ReadP r ()
skipMany :: forall r a. ReadP r a -> ReadP r ()
skipMany ReadP r a
p = forall r a. ReadP r a -> ReadP r [a]
many ReadP r a
p forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall (m :: * -> *) a. Monad m => a -> m a
return ()
skipMany1 :: ReadP r a -> ReadP r ()
skipMany1 :: forall r a. ReadP r a -> ReadP r ()
skipMany1 ReadP r a
p = ReadP r a
p forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall r a. ReadP r a -> ReadP r ()
skipMany ReadP r a
p
sepBy :: ReadP r a -> ReadP r sep -> ReadP r [a]
sepBy :: forall r a sep. ReadP r a -> ReadP r sep -> ReadP r [a]
sepBy ReadP r a
p ReadP r sep
sep = forall r a sep. ReadP r a -> ReadP r sep -> ReadP r [a]
sepBy1 ReadP r a
p ReadP r sep
sep forall r a. ReadP r a -> ReadP r a -> ReadP r a
+++ forall (m :: * -> *) a. Monad m => a -> m a
return []
sepBy1 :: ReadP r a -> ReadP r sep -> ReadP r [a]
sepBy1 :: forall r a sep. ReadP r a -> ReadP r sep -> ReadP r [a]
sepBy1 ReadP r a
p ReadP r sep
sep = forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 (:) ReadP r a
p (forall r a. ReadP r a -> ReadP r [a]
many (ReadP r sep
sep forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> ReadP r a
p))
endBy :: ReadP r a -> ReadP r sep -> ReadP r [a]
endBy :: forall r a sep. ReadP r a -> ReadP r sep -> ReadP r [a]
endBy ReadP r a
p ReadP r sep
sep = forall r a. ReadP r a -> ReadP r [a]
many (do a
x <- ReadP r a
p ; sep
_ <- ReadP r sep
sep ; forall (m :: * -> *) a. Monad m => a -> m a
return a
x)
endBy1 :: ReadP r a -> ReadP r sep -> ReadP r [a]
endBy1 :: forall r a sep. ReadP r a -> ReadP r sep -> ReadP r [a]
endBy1 ReadP r a
p ReadP r sep
sep = forall r a. ReadP r a -> ReadP r [a]
many1 (do a
x <- ReadP r a
p ; sep
_ <- ReadP r sep
sep ; forall (m :: * -> *) a. Monad m => a -> m a
return a
x)
chainr :: ReadP r a -> ReadP r (a -> a -> a) -> a -> ReadP r a
chainr :: forall r a. ReadP r a -> ReadP r (a -> a -> a) -> a -> ReadP r a
chainr ReadP r a
p ReadP r (a -> a -> a)
op a
x = forall r a. ReadP r a -> ReadP r (a -> a -> a) -> ReadP r a
chainr1 ReadP r a
p ReadP r (a -> a -> a)
op forall r a. ReadP r a -> ReadP r a -> ReadP r a
+++ forall (m :: * -> *) a. Monad m => a -> m a
return a
x
chainl :: ReadP r a -> ReadP r (a -> a -> a) -> a -> ReadP r a
chainl :: forall r a. ReadP r a -> ReadP r (a -> a -> a) -> a -> ReadP r a
chainl ReadP r a
p ReadP r (a -> a -> a)
op a
x = forall r a. ReadP r a -> ReadP r (a -> a -> a) -> ReadP r a
chainl1 ReadP r a
p ReadP r (a -> a -> a)
op forall r a. ReadP r a -> ReadP r a -> ReadP r a
+++ forall (m :: * -> *) a. Monad m => a -> m a
return a
x
chainr1 :: ReadP r a -> ReadP r (a -> a -> a) -> ReadP r a
chainr1 :: forall r a. ReadP r a -> ReadP r (a -> a -> a) -> ReadP r a
chainr1 ReadP r a
p ReadP r (a -> a -> a)
op = ReadP r a
scan
where scan :: ReadP r a
scan = ReadP r a
p forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= a -> ReadP r a
rest
rest :: a -> ReadP r a
rest a
x = do a -> a -> a
f <- ReadP r (a -> a -> a)
op
a
y <- ReadP r a
scan
forall (m :: * -> *) a. Monad m => a -> m a
return (a -> a -> a
f a
x a
y)
forall r a. ReadP r a -> ReadP r a -> ReadP r a
+++ forall (m :: * -> *) a. Monad m => a -> m a
return a
x
chainl1 :: ReadP r a -> ReadP r (a -> a -> a) -> ReadP r a
chainl1 :: forall r a. ReadP r a -> ReadP r (a -> a -> a) -> ReadP r a
chainl1 ReadP r a
p ReadP r (a -> a -> a)
op = ReadP r a
p forall (m :: * -> *) a b. Monad m => m a -> (a -> m b) -> m b
>>= a -> ReadP r a
rest
where rest :: a -> ReadP r a
rest a
x = do a -> a -> a
f <- ReadP r (a -> a -> a)
op
a
y <- ReadP r a
p
a -> ReadP r a
rest (a -> a -> a
f a
x a
y)
forall r a. ReadP r a -> ReadP r a -> ReadP r a
+++ forall (m :: * -> *) a. Monad m => a -> m a
return a
x
manyTill :: ReadP r a -> ReadP [a] end -> ReadP r [a]
manyTill :: forall r a end. ReadP r a -> ReadP [a] end -> ReadP r [a]
manyTill ReadP r a
p ReadP [a] end
end = ReadP r [a]
scan
where scan :: ReadP r [a]
scan = (ReadP [a] end
end forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> forall (m :: * -> *) a. Monad m => a -> m a
return []) forall a r. ReadP a a -> ReadP r a -> ReadP r a
<++ (forall (m :: * -> *) a1 a2 r.
Monad m =>
(a1 -> a2 -> r) -> m a1 -> m a2 -> m r
liftM2 (:) ReadP r a
p ReadP r [a]
scan)
readP_to_S :: ReadP a a -> ReadS a
readP_to_S :: forall a. ReadP a a -> ReadS a
readP_to_S (R (a -> P Char a) -> P Char a
f) = forall c a. P c a -> [c] -> [(a, [c])]
run ((a -> P Char a) -> P Char a
f forall (m :: * -> *) a. Monad m => a -> m a
return)
readS_to_P :: ReadS a -> ReadP r a
readS_to_P :: forall a r. ReadS a -> ReadP r a
readS_to_P ReadS a
r =
forall r s a. ((a -> P s r) -> P s r) -> Parser r s a
R (\a -> P Char r
k -> forall s a. ([s] -> P s a) -> P s a
Look (\String
s -> forall a s. [(a, [s])] -> P s a
final [(r, String)
bs'' | (a
a,String
s') <- ReadS a
r String
s, (r, String)
bs'' <- forall c a. P c a -> [c] -> [(a, [c])]
run (a -> P Char r
k a
a) String
s']))
readP_to_E :: (String -> String) -> ReadP a a -> ReadE a
readP_to_E :: forall a. (String -> String) -> ReadP a a -> ReadE a
readP_to_E String -> String
err ReadP a a
r =
forall a. (String -> Either String a) -> ReadE a
ReadE forall a b. (a -> b) -> a -> b
$ \String
txt -> case [ a
p | (a
p, String
s) <- forall a. ReadP a a -> ReadS a
readP_to_S ReadP a a
r String
txt
, forall (t :: * -> *) a. Foldable t => (a -> Bool) -> t a -> Bool
all Char -> Bool
isSpace String
s ]
of [] -> forall a b. a -> Either a b
Left (String -> String
err String
txt)
(a
p:[a]
_) -> forall a b. b -> Either a b
Right a
p