-- | -- Module : Data.SExpresso.Parse.Char -- Copyright : © 2019 Vincent Archambault -- License : 0BSD -- -- Maintainer : Vincent Archambault -- Stability : experimental -- -- The module "Data.SExpresso.Parse" re-exports the functions of this -- module. {-# LANGUAGE OverloadedStrings #-} {-# LANGUAGE TypeFamilies #-} module Data.SExpresso.Parse.Char ( plainSExprParser ) where import Text.Megaparsec import Text.Megaparsec.Char import Data.SExpresso.Parse.Generic -- | The function 'plainSExprParser' accepts a parser for atoms and -- returns a 'SExprParser' for a stream of 'Char' with the following -- properties : -- -- * The opening tag is (. -- * The closing tag is ). -- * The space parser is 'space1'. -- * Space is always mandatory between atoms. plainSExprParser :: (MonadParsec e s m, Token s ~ Char) => m a -> SExprParser m () a plainSExprParser p = SExprParser (char '(' >> return ()) (\_ -> char ')' >> return ()) p space1 spaceIsMandatory