@@ -14,6 +14,11 @@ module Streamly.Internal.Unicode.Char.Parser
15 -- * Generic
15 -- * Generic
17 , dropSpace
22 , dropSpace
18 , dropSpace1
23 , dropSpace1
@@ -140,10 +145,25 @@ CHAR_PARSER(asciiLower,isAsciiLower)
140char :: MonadCatch m => Char -> Parser m Char Char
145char :: MonadCatch m => Char -> Parser m Char Char
141char c = Parser.satisfy (== c)
146char c = Parser.satisfy (== c)
148+-- XXX Case conversion may lead to change in number of chars
149+-- | Match a specific character ignoring case.
150+{-# INLINE charAnyCase #-}
151+charAnyCase :: MonadCatch m => Char -> Parser m Char Char
152+charAnyCase c = Parser.lmap Char.toLower (Parser.satisfy (== Char.toLower c))
143--------------------------------------------------------------------------------
154--------------------------------------------------------------------------------
144-- Character sequences
155-- Character sequences
145--------------------------------------------------------------------------------
156--------------------------------------------------------------------------------
158+-- | Match the input with the supplied string and return it if successful.
159+string :: MonadCatch m => String -> Parser m Char String
162+-- XXX Not accurate unicode case conversion
163+-- | Match the input with the supplied string and return it if successful.
164+stringAnyCase :: MonadCatch m => String -> Parser m Char String
165+stringAnyCase s = Parser.lmap Char.toLower (Parser.list (map Char.toLower s))
147-- | Drop /zero/ or more white space characters.
167-- | Drop /zero/ or more white space characters.
148dropSpace :: MonadCatch m => Parser m Char ()
168dropSpace :: MonadCatch m => Parser m Char ()
149dropSpace = Parser.dropWhile Char.isSpace
169dropSpace = Parser.dropWhile Char.isSpace