module Text.Parsec.IndentParsec.Token
(
GenIndentTokenParser
, IndentTokenParser
, identifier
, operator
, reserved
, reservedOp
, charLiteral
, stringLiteral
, natural
, integer
, float
, naturalOrFloat
, decimal
, hexadecimal
, octal
, symbol
, lexeme
, whiteSpace
, semi
, comma
, colon
, dot
, parens, parensBlock
, braces, bracesBlock
, angles, anglesBlock
, brackets, bracketsBlock
, semiSep, semiSepOrFoldedLines
, semiSep1, semiSepOrFoldedLines1
, commaSep, commaSepOrFoldedLines
, commaSep1, commaSepOrFoldedLines1
) where
import Text.Parsec.IndentParsec.Prim
import Text.Parsec.IndentParsec.Combinator
import Text.Parsec(many)
import qualified Text.Parsec.Token as T
import Text.Parsec(Stream)
import Text.Parsec.Combinator hiding (between)
type GenIndentTokenParser i s u m = T.GenTokenParser s u (IndentT i m)
type IndentTokenParser s u m = GenIndentTokenParser HaskellLike s u m
identifier :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
identifier = tokeniser . T.identifier
operator :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
operator = tokeniser . T.operator
reserved :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> String
-> GenIndentParsecT i s u m ()
reserved tokP = tokeniser . T.reserved tokP
reservedOp :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> String
-> GenIndentParsecT i s u m ()
reservedOp tokP = tokeniser . T.reservedOp tokP
charLiteral :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m Char
charLiteral = tokeniser . T.charLiteral
stringLiteral :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
stringLiteral = tokeniser . T.stringLiteral
natural :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m Integer
natural = tokeniser . T.natural
integer :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m Integer
integer = tokeniser . T.integer
float :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m Double
float = tokeniser . T.float
naturalOrFloat :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m (Either Integer Double)
naturalOrFloat = tokeniser . T.naturalOrFloat
decimal :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m Integer
decimal = tokeniser . T.decimal
hexadecimal :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m Integer
hexadecimal = tokeniser . T.hexadecimal
octal :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m Integer
octal = tokeniser . T.octal
symbol :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> String
-> GenIndentParsecT i s u m String
symbol tokP = tokeniser . T.symbol tokP
lexeme :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m a
-> GenIndentParsecT i s u m a
lexeme tokP = tokeniser . T.lexeme tokP
whiteSpace :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m ()
whiteSpace = T.whiteSpace
semi :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
semi = tokeniser . T.semi
comma :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
comma = tokeniser . T.comma
colon :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
colon = tokeniser . T.colon
dot :: (Indentation i, Monad m)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
dot = tokeniser . T.dot
lparen :: (Monad m, Indentation i)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
rparen :: (Monad m, Indentation i)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
lbrace :: (Monad m, Indentation i)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
rbrace :: (Monad m, Indentation i)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
langle :: (Monad m, Indentation i)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
rangle :: (Monad m, Indentation i)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
lbracket :: (Monad m, Indentation i)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
rbracket :: (Monad m, Indentation i)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m String
lparen tokP = symbol tokP "("
rparen tokP = symbol tokP ")"
lbrace tokP = symbol tokP "{"
rbrace tokP = symbol tokP "}"
langle tokP = symbol tokP "<"
rangle tokP = symbol tokP ">"
lbracket tokP = symbol tokP "["
rbracket tokP = symbol tokP "]"
parens :: (Indentation i, Show i,
Monad m, Stream s (IndentT i m) t, Show t)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m a
-> GenIndentParsecT i s u m a
parens tokP = lparen tokP `between` rparen tokP
parensBlock :: (Monad m, Stream s (IndentT HaskellLike m) t, Show t)
=> GenIndentTokenParser HaskellLike s u m
-> GenIndentParsecT HaskellLike s u m a
-> GenIndentParsecT HaskellLike s u m a
parensBlock tokP = lparen tokP `betweenBlock` rparen tokP
braces :: (Indentation i, Show i,
Monad m, Stream s (IndentT i m) t, Show t)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m a
-> GenIndentParsecT i s u m a
braces tokP = lbrace tokP `between` rbrace tokP
bracesBlock :: (Monad m, Stream s (IndentT HaskellLike m) t, Show t)
=> GenIndentTokenParser HaskellLike s u m
-> GenIndentParsecT HaskellLike s u m a
-> GenIndentParsecT HaskellLike s u m a
bracesBlock tokP = lbrace tokP `betweenBlock` rbrace tokP
angles :: (Indentation i, Show i, Monad m,
Stream s (IndentT i m) t, Show t)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m a
-> GenIndentParsecT i s u m a
angles tokP = langle tokP `between` rangle tokP
anglesBlock :: (Monad m, Stream s (IndentT HaskellLike m) t, Show t)
=> GenIndentTokenParser HaskellLike s u m
-> GenIndentParsecT HaskellLike s u m a
-> GenIndentParsecT HaskellLike s u m a
anglesBlock tokP = langle tokP `betweenBlock` rangle tokP
brackets :: (Indentation i, Show i, Monad m, Stream s (IndentT i m) t, Show t)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m a
-> GenIndentParsecT i s u m a
brackets tokP = lbracket tokP `between` rbracket tokP
bracketsBlock :: (Monad m, Stream s (IndentT HaskellLike m) t, Show t)
=> GenIndentTokenParser HaskellLike s u m
-> GenIndentParsecT HaskellLike s u m a
-> GenIndentParsecT HaskellLike s u m a
bracketsBlock tokP = lbracket tokP `betweenBlock` rbracket tokP
semiSep :: (Indentation i, Monad m, Stream s (IndentT i m) t, Show t)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m a
-> GenIndentParsecT i s u m [a]
semiSep tokP p = sepBy p $ semi tokP
semiSep1 :: (Indentation i, Monad m, Stream s (IndentT i m) t, Show t)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m a
-> GenIndentParsecT i s u m [a]
semiSep1 tokP p = sepBy1 p $ semi tokP
semiSepOrFoldedLines :: (Monad m, Stream s (IndentT HaskellLike m ) t, Show t)
=> GenIndentTokenParser HaskellLike s u m
-> GenIndentParsecT HaskellLike s u m a
-> GenIndentParsecT HaskellLike s u m [a]
semiSepOrFoldedLines tokP p = fmap concat . many
. foldedLinesOf
. sepEndBy1 p
$ semi tokP
semiSepOrFoldedLines1 :: (Monad m, Stream s (IndentT HaskellLike m ) t, Show t)
=> GenIndentTokenParser HaskellLike s u m
-> GenIndentParsecT HaskellLike s u m a
-> GenIndentParsecT HaskellLike s u m [a]
semiSepOrFoldedLines1 tokP p = do first <- foldedLinesOf . sepEndBy1 p
$ semi tokP
rest <- semiSepOrFoldedLines tokP p
return (first ++ rest)
commaSep :: (Indentation i, Monad m, Stream s (IndentT i m) t, Show t)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m a
-> GenIndentParsecT i s u m [a]
commaSep tokP p = sepBy p $ comma tokP
commaSep1 :: (Indentation i, Monad m, Stream s (IndentT i m) t, Show t)
=> GenIndentTokenParser i s u m
-> GenIndentParsecT i s u m a
-> GenIndentParsecT i s u m [a]
commaSep1 tokP p = sepBy1 p $ comma tokP
commaSepOrFoldedLines :: (Monad m, Stream s (IndentT HaskellLike m ) t, Show t)
=> GenIndentTokenParser HaskellLike s u m
-> GenIndentParsecT HaskellLike s u m a
-> GenIndentParsecT HaskellLike s u m [a]
commaSepOrFoldedLines tokP p = fmap concat . many
. foldedLinesOf
. sepEndBy1 p
$ comma tokP
commaSepOrFoldedLines1 :: (Monad m, Stream s (IndentT HaskellLike m ) t, Show t)
=> GenIndentTokenParser HaskellLike s u m
-> GenIndentParsecT HaskellLike s u m a
-> GenIndentParsecT HaskellLike s u m [a]
commaSepOrFoldedLines1 tokP p = do first <- foldedLinesOf . sepEndBy1 p
$ comma tokP
rest <- commaSepOrFoldedLines tokP p
return (first ++ rest)