{-# OPTIONS_GHC -O2 -fglasgow-exts #-}
module Text.Parser.PArrow.Char where

import Text.Parser.PArrow.CharSet
import Text.Parser.PArrow.MD
import Data.ByteString.Char8 (ByteString, pack)

-- | Match a single given character and return it.
char :: Char -> MD i ByteString
char    = MEqual . pack . (:[])

-- | Match a character.
anyChar :: MD i ByteString
anyChar = MCSet CS_Any

-- | Match any character in the given list.
anyOf   :: [Char] -> MD i ByteString
anyOf   = MChoice . (map char)

-- | Match a digit (0..9)
digit   :: MD i ByteString
digit   = MCSet CS_Digit

-- | Match a letter.
letter  :: MD i ByteString
letter  = MCSet CS_Alpha

-- | Match a letter or a digit.
alnum  :: MD i ByteString
alnum   = MCSet CS_Alnum

-- | Match a 'word' character - (alnum or '_')
wordChar:: MD i ByteString
wordChar= MCSet CS_Word

-- | Match a word consisting of wordChars.
{-
word   :: MD i ByteStringing
word    = many1 wordChar

-- | Match a sequence of whitespace.
spaces :: MD i ByteStringing
spaces  = many1 white
-}

-- | Match a single whitespace character.
white  :: MD i ByteString
white   = MCSet (CS_Whitespace)

-- | Match a constant string.
string :: ByteString -> MD i ByteString
string = MEqual