egison-pattern-src-0.2.0.0: src/Language/Egison/Parser/Pattern/Prim/Source.hs
{-# LANGUAGE AllowAmbiguousTypes #-}
-- |
--
-- Module: Language.Egison.Parser.Pattern.Prim.Source
-- Description: Constraint for the source of parser
-- Stability: experimental
--
-- A constraint and property of the source of parser
module Language.Egison.Parser.Pattern.Prim.Source
( Source(..)
, Token
, Tokens
)
where
import Data.Text ( Text )
import qualified Data.Text as T
( null
, cons
, snoc
)
import qualified Text.Megaparsec as Parsec
( Stream(..) )
import Language.Egison.Parser.Pattern.Token
( IsToken )
-- | Type of token in the source.
type Token s = Parsec.Token s
-- | Type of tokens in the source.
type Tokens s = Parsec.Tokens s
-- | Constraint for the source of parser.
-- TODO: Hide these methods in haddock (see haskell/haddock#330)
class (Parsec.Stream s, IsToken (Token s)) => Source s where
-- | Check if the stream is null or not.
eof :: s -> Bool
-- | Reify the input stream into a chunk of tokens.
tokens :: s -> Tokens s
-- | Add a token to the front of a chunk.
consTokens :: Token s -> Tokens s -> Tokens s
-- | Add a token to the back of a chunk.
snocTokens :: Tokens s -> Token s -> Tokens s
instance Source Text where
eof = T.null
tokens = id
consTokens = T.cons
snocTokens = T.snoc
instance Source String where
eof = null
tokens = id
consTokens = (:)
snocTokens xs x = xs ++ [x]