module ParseLib.Abstract.Derived
(
module ParseLib.Abstract.Core,
(<$),
(<*),
(*>),
epsilon,
symbol,
token,
pack,
sequence,
choice,
option,
optional,
many,
some, many1,
listOf,
chainr,
chainl,
greedy,
greedy1,
eof
)
where
import qualified ParseLib.Simple.Derived as SP
import Prelude hiding ((>>=), (<$), (<*), (*>), sequence)
import ParseLib.Abstract.Core
infixl 4 <$
infixl 4 <*
infixl 4 *>
(<$) :: b -> Parser s a -> Parser s b
b
f <$ :: forall b s a. b -> Parser s a -> Parser s b
<$ Parser s a
p = b -> a -> b
forall a b. a -> b -> a
const b
f (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s a
p
(<*) :: Parser s a -> Parser s b -> Parser s a
Parser s a
p <* :: forall s a b. Parser s a -> Parser s b -> Parser s a
<* Parser s b
q = a -> b -> a
forall a b. a -> b -> a
const (a -> b -> a) -> Parser s a -> Parser s (b -> a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s a
p Parser s (b -> a) -> Parser s b -> Parser s a
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s b
q
(*>) :: Parser s a -> Parser s b -> Parser s b
Parser s a
p *> :: forall s a b. Parser s a -> Parser s b -> Parser s b
*> Parser s b
q = (b -> a -> b) -> a -> b -> b
forall a b c. (a -> b -> c) -> b -> a -> c
flip b -> a -> b
forall a b. a -> b -> a
const (a -> b -> b) -> Parser s a -> Parser s (b -> b)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s a
p Parser s (b -> b) -> Parser s b -> Parser s b
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s b
q
epsilon :: Parser s ()
epsilon :: forall s. Parser s ()
epsilon = () -> Parser s ()
forall a s. a -> Parser s a
succeed ()
symbol :: Eq s => s -> Parser s s
symbol :: forall s. Eq s => s -> Parser s s
symbol s
x = ([s] -> ([(s, [s])], DifferenceList (ParseError [s])))
-> Parser s s
forall s r.
([s] -> ([(r, [s])], DifferenceList (ParseError [s])))
-> Parser s r
Parser (s -> [s] -> ([(s, [s])], DifferenceList (ParseError [s]))
forall s. Eq s => s -> Parser s s
SP.symbol s
x)
token :: Eq s => [s] -> Parser s [s]
token :: forall s. Eq s => [s] -> Parser s [s]
token [s]
t = ([s] -> ([([s], [s])], DifferenceList (ParseError [s])))
-> Parser s [s]
forall s r.
([s] -> ([(r, [s])], DifferenceList (ParseError [s])))
-> Parser s r
Parser ([s] -> [s] -> ([([s], [s])], DifferenceList (ParseError [s]))
forall s. Eq s => [s] -> Parser s [s]
SP.token [s]
t)
pack :: Parser s a -> Parser s b -> Parser s c -> Parser s b
pack :: forall s a b c.
Parser s a -> Parser s b -> Parser s c -> Parser s b
pack Parser s a
p Parser s b
r Parser s c
q = Parser s a
p Parser s a -> Parser s b -> Parser s b
forall s a b. Parser s a -> Parser s b -> Parser s b
*> Parser s b
r Parser s b -> Parser s c -> Parser s b
forall s a b. Parser s a -> Parser s b -> Parser s a
<* Parser s c
q
sequence :: [Parser s a] -> Parser s [a]
sequence :: forall s a. [Parser s a] -> Parser s [a]
sequence [] = [a] -> Parser s [a]
forall a s. a -> Parser s a
succeed []
sequence (Parser s a
p:[Parser s a]
ps) = (:) (a -> [a] -> [a]) -> Parser s a -> Parser s ([a] -> [a])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s a
p Parser s ([a] -> [a]) -> Parser s [a] -> Parser s [a]
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> [Parser s a] -> Parser s [a]
forall s a. [Parser s a] -> Parser s [a]
sequence [Parser s a]
ps
choice :: [Parser s a] -> Parser s a
choice :: forall s a. [Parser s a] -> Parser s a
choice = (Parser s a -> Parser s a -> Parser s a)
-> Parser s a -> [Parser s a] -> Parser s a
forall a b. (a -> b -> b) -> b -> [a] -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr Parser s a -> Parser s a -> Parser s a
forall a. Parser s a -> Parser s a -> Parser s a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
(<|>) Parser s a
forall a. Parser s a
forall (f :: * -> *) a. Alternative f => f a
empty
option :: Parser s a -> a -> Parser s a
option :: forall s a. Parser s a -> a -> Parser s a
option Parser s a
p a
d = Parser s a
p Parser s a -> Parser s a -> Parser s a
forall a. Parser s a -> Parser s a -> Parser s a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> a -> Parser s a
forall a s. a -> Parser s a
succeed a
d
optional :: Parser s a -> Parser s (Maybe a)
optional :: forall s a. Parser s a -> Parser s (Maybe a)
optional Parser s a
p = Parser s (Maybe a) -> Maybe a -> Parser s (Maybe a)
forall s a. Parser s a -> a -> Parser s a
option (a -> Maybe a
forall a. a -> Maybe a
Just (a -> Maybe a) -> Parser s a -> Parser s (Maybe a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s a
p) Maybe a
forall a. Maybe a
Nothing
many :: Parser s a -> Parser s [a]
many :: forall s a. Parser s a -> Parser s [a]
many Parser s a
p = (:) (a -> [a] -> [a]) -> Parser s a -> Parser s ([a] -> [a])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s a
p Parser s ([a] -> [a]) -> Parser s [a] -> Parser s [a]
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s a -> Parser s [a]
forall s a. Parser s a -> Parser s [a]
many Parser s a
p Parser s [a] -> Parser s [a] -> Parser s [a]
forall a. Parser s a -> Parser s a -> Parser s a
forall (f :: * -> *) a. Alternative f => f a -> f a -> f a
<|> [a] -> Parser s [a]
forall a s. a -> Parser s a
succeed []
some :: Parser s a -> Parser s [a]
some :: forall s a. Parser s a -> Parser s [a]
some Parser s a
p = (:) (a -> [a] -> [a]) -> Parser s a -> Parser s ([a] -> [a])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s a
p Parser s ([a] -> [a]) -> Parser s [a] -> Parser s [a]
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s a -> Parser s [a]
forall s a. Parser s a -> Parser s [a]
many Parser s a
p
many1 :: Parser s a -> Parser s [a]
many1 :: forall s a. Parser s a -> Parser s [a]
many1 = Parser s a -> Parser s [a]
forall s a. Parser s a -> Parser s [a]
some
listOf :: Parser s a -> Parser s b -> Parser s [a]
listOf :: forall s a b. Parser s a -> Parser s b -> Parser s [a]
listOf Parser s a
p Parser s b
s = (:) (a -> [a] -> [a]) -> Parser s a -> Parser s ([a] -> [a])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s a
p Parser s ([a] -> [a]) -> Parser s [a] -> Parser s [a]
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s a -> Parser s [a]
forall s a. Parser s a -> Parser s [a]
many (Parser s b
s Parser s b -> Parser s a -> Parser s a
forall s a b. Parser s a -> Parser s b -> Parser s b
*> Parser s a
p)
chainr :: Parser s a -> Parser s (a -> a -> a) -> Parser s a
chainr :: forall s a. Parser s a -> Parser s (a -> a -> a) -> Parser s a
chainr Parser s a
pe Parser s (a -> a -> a)
po = [a -> a] -> a -> a
forall {t :: * -> *} {b}. Foldable t => t (b -> b) -> b -> b
h ([a -> a] -> a -> a) -> Parser s [a -> a] -> Parser s (a -> a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s (a -> a) -> Parser s [a -> a]
forall s a. Parser s a -> Parser s [a]
many (a -> (a -> a -> a) -> a -> a
forall {t} {a} {b}. t -> (t -> a -> b) -> a -> b
j (a -> (a -> a -> a) -> a -> a)
-> Parser s a -> Parser s ((a -> a -> a) -> a -> a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s a
pe Parser s ((a -> a -> a) -> a -> a)
-> Parser s (a -> a -> a) -> Parser s (a -> a)
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s (a -> a -> a)
po) Parser s (a -> a) -> Parser s a -> Parser s a
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s a
pe
where j :: t -> (t -> a -> b) -> a -> b
j t
x t -> a -> b
op = (t
x t -> a -> b
`op`)
h :: t (b -> b) -> b -> b
h t (b -> b)
fs b
x = ((b -> b) -> b -> b) -> b -> t (b -> b) -> b
forall a b. (a -> b -> b) -> b -> t a -> b
forall (t :: * -> *) a b.
Foldable t =>
(a -> b -> b) -> b -> t a -> b
foldr (b -> b) -> b -> b
forall a b. (a -> b) -> a -> b
($) b
x t (b -> b)
fs
chainl :: Parser s a -> Parser s (a -> a -> a) -> Parser s a
chainl :: forall s a. Parser s a -> Parser s (a -> a -> a) -> Parser s a
chainl Parser s a
pe Parser s (a -> a -> a)
po = a -> [a -> a] -> a
forall {t :: * -> *} {b}. Foldable t => b -> t (b -> b) -> b
h (a -> [a -> a] -> a) -> Parser s a -> Parser s ([a -> a] -> a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s a
pe Parser s ([a -> a] -> a) -> Parser s [a -> a] -> Parser s a
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s (a -> a) -> Parser s [a -> a]
forall s a. Parser s a -> Parser s [a]
many ((a -> a -> a) -> a -> a -> a
forall a b c. (a -> b -> c) -> b -> a -> c
j ((a -> a -> a) -> a -> a -> a)
-> Parser s (a -> a -> a) -> Parser s (a -> a -> a)
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s (a -> a -> a)
po Parser s (a -> a -> a) -> Parser s a -> Parser s (a -> a)
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s a
pe)
where j :: (a -> p -> c) -> p -> a -> c
j a -> p -> c
op p
x = (a -> p -> c
`op` p
x)
h :: b -> t (b -> b) -> b
h b
x t (b -> b)
fs = (b -> (b -> b) -> b) -> b -> t (b -> b) -> b
forall b a. (b -> a -> b) -> b -> t a -> b
forall (t :: * -> *) b a.
Foldable t =>
(b -> a -> b) -> b -> t a -> b
foldl (((b -> b) -> b -> b) -> b -> (b -> b) -> b
forall a b c. (a -> b -> c) -> b -> a -> c
flip (b -> b) -> b -> b
forall a b. (a -> b) -> a -> b
($)) b
x t (b -> b)
fs
greedy :: Parser s b -> Parser s [b]
greedy :: forall s a. Parser s a -> Parser s [a]
greedy Parser s b
p = (:) (b -> [b] -> [b]) -> Parser s b -> Parser s ([b] -> [b])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s b
p Parser s ([b] -> [b]) -> Parser s [b] -> Parser s [b]
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s b -> Parser s [b]
forall s a. Parser s a -> Parser s [a]
greedy Parser s b
p Parser s [b] -> Parser s [b] -> Parser s [b]
forall s a. Parser s a -> Parser s a -> Parser s a
<<|> [b] -> Parser s [b]
forall a s. a -> Parser s a
succeed []
greedy1 :: Parser s b -> Parser s [b]
greedy1 :: forall s a. Parser s a -> Parser s [a]
greedy1 Parser s b
p = (:) (b -> [b] -> [b]) -> Parser s b -> Parser s ([b] -> [b])
forall (f :: * -> *) a b. Functor f => (a -> b) -> f a -> f b
<$> Parser s b
p Parser s ([b] -> [b]) -> Parser s [b] -> Parser s [b]
forall a b. Parser s (a -> b) -> Parser s a -> Parser s b
forall (f :: * -> *) a b. Applicative f => f (a -> b) -> f a -> f b
<*> Parser s b -> Parser s [b]
forall s a. Parser s a -> Parser s [a]
greedy Parser s b
p
eof :: Parser s ()
eof :: forall s. Parser s ()
eof = ([s] -> ([((), [s])], DifferenceList (ParseError [s])))
-> Parser s ()
forall s r.
([s] -> ([(r, [s])], DifferenceList (ParseError [s])))
-> Parser s r
Parser ([s] -> ([((), [s])], DifferenceList (ParseError [s]))
forall s. Parser s ()
SP.eof)