regex-do-1.0: src/Regexdo/Pcre/Option.hs
module Regexdo.Pcre.Option (
Comp(..),
Exec(..),
comp,
exec
) where
import Data.Bits
import qualified Text.Regex.PCRE.ByteString as B
data Comp = Blank -- ^ 'B.compBlank'
| Anchored -- ^ 'B.compAnchored'
| Caseless -- ^ 'B.compCaseless'
| Dotall -- ^ 'B.compDotAll'
| Multiline -- ^ 'B.compMultiline'
| Utf8 -- ^ 'B.compUTF8'
| Ungreedy -- ^ 'B.compUngreedy'
deriving Enum
data Exec = BlankE -- ^ 'B.execBlank'
| NotEmpty -- ^ 'B.execNotEmpty'
| Partial -- ^ 'B.execPartial'
deriving Enum
compOpt::Comp -> B.CompOption
compOpt o = case o of
Blank -> B.compBlank
Anchored -> B.compAnchored
Caseless -> B.compCaseless
Dotall -> B.compDotAll
Multiline -> B.compMultiline
Utf8 -> B.compUTF8
Ungreedy -> B.compUngreedy
comp::[Comp] -> B.CompOption
comp [] = B.compBlank
comp l = foldl (.&.) o0 l1
where l1 = compOpt <$> l
o0 = compOpt $ head l
execOpt::Exec -> B.ExecOption
execOpt o = case o of
BlankE -> B.execBlank
NotEmpty -> B.execNotEmpty
Partial -> B.execPartial
exec::[Exec] -> B.ExecOption
exec [] = B.execBlank
exec l = foldl (.&.) o0 l1
where l1 = execOpt <$> l
o0 = execOpt $ head l