module Text.Parsec.Combinator.Extras ( optional, but, tryString, stringCI ) where import Control.Applicative ((<|>)) import Data.Char (toLower, toUpper) import Text.Parsec.String (Parser) import Text.Parsec (many, noneOf, try, optionMaybe, string, char) optional :: Parser a -> Parser (Maybe a) optional = optionMaybe . try but :: String -> Parser String but = many . noneOf tryString :: String -> Parser String tryString = try . string stringCI :: String -> Parser String stringCI = mapM (\c -> char (toUpper c) <|> char (toLower c))