on master help sign in
Add charAnyCase, string, stringAnyCase parsers
183a887Harendra Kumar
src/Streamly/Internal/Unicode/Char/Parser.hs+20
@@ -14,6 +14,11 @@ module Streamly.Internal.Unicode.Char.Parser
14 (
14 (
15 -- * Generic
15 -- * Generic
16 char
16 char
17+ , charAnyCase
18+
19+ -- * Sequences
20+ , string
21+ , stringAnyCase
17 , dropSpace
22 , dropSpace
18 , dropSpace1
23 , dropSpace1
19
24
@@ -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)
142
147
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))
153+
143--------------------------------------------------------------------------------
154--------------------------------------------------------------------------------
144-- Character sequences
155-- Character sequences
145--------------------------------------------------------------------------------
156--------------------------------------------------------------------------------
146
157
158+-- | Match the input with the supplied string and return it if successful.
159+string :: MonadCatch m => String -> Parser m Char String
160+string = Parser.list
161+
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))
166+
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