module Data.Syntax.Char (
SyntaxChar,
spaces,
spaces_,
spaces1,
spaces1_,
endOfLine
) where
import Control.Lens.SemiIso
import Data.Char
import Data.MonoTraversable
import Data.Monoid
import Data.SemiIsoFunctor
import Data.Syntax (Syntax)
import qualified Data.Syntax as S
type SyntaxChar syn seq = (Syntax syn seq, Element seq ~ Char)
spaces :: SyntaxChar syn seq => syn ()
spaces = constant (opoint ' ') /$/ S.takeWhile isSpace
spaces_ :: SyntaxChar syn seq => syn ()
spaces_ = constant mempty /$/ S.takeWhile isSpace
spaces1 :: SyntaxChar syn seq => syn ()
spaces1 = constant (opoint ' ') /$/ S.takeWhile1 isSpace
spaces1_ :: SyntaxChar syn seq => syn ()
spaces1_ = constant mempty /$/ S.takeWhile1 isSpace
endOfLine :: SyntaxChar syn seq => syn ()
endOfLine = S.char '\n'