{-# LANGUAGE FlexibleContexts, FlexibleInstances, UndecidableInstances, CPP #-} {-# OPTIONS_GHC -fno-warn-orphans #-} -- | -- Literal notation for regular expression. -- -- Importing this module with the 'QuasiQuotes' and 'OverloadedStrings' -- extensions making possible to directly specify reqular expression -- literal. This means that awkward backslashes are not necessary. -- -- You can copy a regular expression in other languages and paste it -- to your Haskell program. -- -- Sample code: -- -- > {-# LANGUAGE QuasiQuotes, OverloadedStrings #-} -- > -- > import Text.Regex.Literal -- > import Text.Regex.Posix -- > -- > -- Regular expression as the regular expression literal -- > regexp :: Regex -- > regexp = [$re|\\(foo)\\(bar\.c)|] -- -- Compare with regular expression as the String literal. -- -- > regexp :: Regex -- > regexp = makeRegex ("\\\\(foo)\\\\(bar\\.c)" :: String) -- -- GHC 6.12.3 or earlier requires the dollar sign before \"re\". -- -- GHC 7.0.1 does not allow the dollar sign before \"re\". -- -- GHC 7.0.2 or later allows the dollar sign before \"re\" as an -- obsoleted syntax. -- -- So, use GHC other than 7.0.1 and specify the dollor sign for -- portability. module Text.Regex.Literal (re) where import Data.String import Language.Haskell.TH import Language.Haskell.TH.Quote import Text.Regex.Base {-| A 'QuasiQuoter' function to implement regular expression literal. -} re :: QuasiQuoter #if __GLASGOW_HASKELL__ >= 700 re = QuasiQuoter parseExprExp parseExprPat parseExprType parseExprDec #else re = QuasiQuoter parseExprExp parseExprPat #endif parseExprExp :: String -> ExpQ parseExprExp x = return . LitE . StringL $ x parseExprPat :: String -> PatQ parseExprPat = undefined #if __GLASGOW_HASKELL__ >= 700 parseExprType :: String -> TypeQ parseExprType = undefined parseExprDec :: String -> Q [Dec] parseExprDec = undefined #endif instance (RegexMaker regex compOpt execOpt String) => IsString regex where fromString s = make s where make :: (RegexMaker regex compOpt execOpt String) => String -> regex make = makeRegex