> module Text.Regex.Deriv.ExtPattern where
>
> data EPat = EEmpty
> | EGroupNonMarking EPat
> | EGroup EPat
> | EOr [EPat]
> | EConcat [EPat]
> | EOpt EPat Bool
> | EPlus EPat Bool
> | EStar EPat Bool
> | EBound EPat Int (Maybe Int) Bool
> | ECarat
> | EDollar
> | EDot
> | EAny [Char]
> | ENoneOf [Char]
> | EEscape Char
> | EChar Char
> deriving Show
>
> hasGroup :: EPat -> Bool
> hasGroup EEmpty = False
> hasGroup (EGroup _) = True
> hasGroup (EGroupNonMarking ep) = hasGroup ep
> hasGroup (EOr eps) = any hasGroup eps
> hasGroup (EConcat eps) = any hasGroup eps
> hasGroup (EOpt ep _) = hasGroup ep
> hasGroup (EPlus ep _) = hasGroup ep
> hasGroup (EStar ep _) = hasGroup ep
> hasGroup (EBound ep _ _ _) = hasGroup ep
> hasGroup ECarat = False
> hasGroup EDollar = False
> hasGroup EDot = False
> hasGroup (EAny _) = False
> hasGroup (ENoneOf _) = False
> hasGroup (EEscape _) = False
> hasGroup (EChar _) = False