{-# OPTIONS -cpp -fth -fglasgow-exts #-} -- arch-tag: fbf47393-bde4-4ee8-8bf2-80a17bf0b41b module RRegex.TH(mkRe) where import RRegex.PCRE import Array import Control.Exception import Language.Haskell.THSyntax import System.IO.Unsafe -- | template haskell function to turn a string into a Regex mkRe :: String -> ExpQ #ifndef __HADDOCK__ mkRe s = e where e = do v <- qIO $ compile s 0 case v of Left (i,err) -> fail $ "\nPCRE Regular Expression Error:\n" ++ s ++ "\n" ++ replicate i ' ' ++ "^ " ++ err ++ "\n" Right _ -> return () [| unsafePerformIO (compile s 0) |] #endif {- mkRe :: String -> ExpQ mkRe s = e where e = do v <- qIO $ (Control.Exception.catch (regcomp rx f >> return Nothing) (\e -> return $ Just e )) maybe (return ()) (fail . show) v [| unsafePerformIO (Text.Regex.Posix.regcomp rx f) |] (f,rx) | Just (_::String,_::String,rest,a) <- s =~~ "^([si]?)([si]?)/" = let f x y = if x `elem` elems (a :: Array Int String) then y else 0 in (regExtended + f "i" regIgnoreCase + f "s" regNewline, rest) | otherwise = (regExtended,s) -}