{-# LANGUAGE OverloadedStrings #-}
{-# LANGUAGE TypeFamilies #-}
module Data.SExpresso.Parse.Char
(
plainSExprParser
)
where
import Text.Megaparsec
import Text.Megaparsec.Char
import Data.SExpresso.Parse.Generic
plainSExprParser :: (MonadParsec e s m, Token s ~ Char) =>
m a -> SExprParser m () a
plainSExprParser :: m a -> SExprParser m () a
plainSExprParser m a
p = m ()
-> (() -> m ())
-> m a
-> m ()
-> (a -> a -> SpacingRule)
-> SExprParser m () a
forall (m :: * -> *) b a c.
m c
-> (c -> m b)
-> m a
-> m ()
-> (a -> a -> SpacingRule)
-> SExprParser m b a
SExprParser
(Token s -> m (Token s)
forall e s (m :: * -> *).
(MonadParsec e s m, Token s ~ Char) =>
Token s -> m (Token s)
char Char
Token s
'(' m Char -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ())
(\()
_ -> Token s -> m (Token s)
forall e s (m :: * -> *).
(MonadParsec e s m, Token s ~ Char) =>
Token s -> m (Token s)
char Char
Token s
')' m Char -> m () -> m ()
forall (m :: * -> *) a b. Monad m => m a -> m b -> m b
>> () -> m ()
forall (m :: * -> *) a. Monad m => a -> m a
return ())
m a
p
m ()
forall e s (m :: * -> *).
(MonadParsec e s m, Token s ~ Char) =>
m ()
space1
a -> a -> SpacingRule
forall a. a -> a -> SpacingRule
spaceIsMandatory