matchers-0.2.0.0: Text/Matchers/String.hs
module Text.Matchers.String (
tdfa, pcre, within, exact,
CaseSensitive(Sensitive, Insensitive)) where
import Control.Monad.Exception.Synchronous
( Exceptional (Exception, Success))
import Data.Char (toLower)
import Data.List (isInfixOf)
import Data.String.UTF8 (fromString, toRep)
import qualified Text.Matchers.Regex.TDFA as TDFA
import qualified Text.Matchers.Regex.PCRE as PCRE
import Text.Matchers.CaseSensitive
(CaseSensitive(Sensitive, Insensitive))
tdfa :: CaseSensitive
-> String
-> Exceptional String (String -> Bool)
tdfa = TDFA.tdfa
pcre :: CaseSensitive
-> String
-> Exceptional String (String -> Bool)
pcre c s = case PCRE.pcre c (toRep . fromString $ s) of
(Success f) -> return (f . toRep . fromString)
(Exception e) -> Exception e
within :: CaseSensitive -> String -> String -> Bool
within = strMatch isInfixOf
exact :: CaseSensitive -> String -> String -> Bool
exact = strMatch (==)
strMatch :: (String -> String -> Bool)
-> CaseSensitive
-> String
-> String -> Bool
strMatch f c s t = pat `f` str where
str = flipCase t
pat = flipCase s
flipCase = case c of
Sensitive -> id
Insensitive -> map toLower