| Copyright | (C) 2026 - Eitan Chatav |
|---|---|
| License | BSD-style (see the file LICENSE) |
| Maintainer | Eitan Chatav <eitan.chatav@gmail.com> |
| Stability | provisional |
| Portability | non-portable |
| Safe Haskell | None |
| Language | Haskell2010 |
Control.Lens.Grammar.Kleene
Description
Regular expressions form a Kleene star algebra. See Kleene, Representation of Events in Nerve Nets and Finite Automata
Synopsis
- class Monoid k => KleeneStarAlgebra k where
- orK :: (Foldable f, KleeneStarAlgebra k) => f k -> k
- anyK :: (Foldable f, KleeneStarAlgebra k) => (a -> k) -> f a -> k
- class Tokenized token p => TokenAlgebra token p where
- tokenClass :: TokenClass token -> p
- data RegEx token
- = SeqEmpty
- | Sequence (RegEx token) (RegEx token)
- | NonTerminal String
- | KleeneStar (RegEx token)
- | KleeneOpt (RegEx token)
- | KleenePlus (RegEx token)
- | RegExam (RegExam token (RegEx token))
- newtype TokenClass token = TokenClass (RegExam token (TokenClass token))
- data RegExam token alg
- data CategoryTest token
- = AndAsIn (Categorize token)
- | AndNotAsIn (Set (Categorize token))
KleeneStarAlgebra
class Monoid k => KleeneStarAlgebra k where Source #
A KleeneStarAlgebra is a ring
with a generally non-commutative multiplication,
the Monoid concatenation operator <> with identity mempty;
and an idempotent addition, the alternation operator >|<
with identity zeroK.
It has three unary operators optK, plusK and the eponymous starK.
starK x = optK (plusK x)
plusK x = x <> starK x
optK x = mempty >|< x
The following invariants should hold.
x >|< x = x
zeroK >|< x = x = x >|< zeroK
mempty >|< x = optK x = x >|< mempty
zeroK <> x = zeroK = x <> zeroK
mempty <> x = x = x <> mempty
Minimal complete definition
Nothing
Instances
| KleeneStarAlgebra RegBnf Source # | |
| KleeneStarAlgebra RegString Source # | |
| (Ord rule, KleeneStarAlgebra rule) => KleeneStarAlgebra (Bnf rule) Source # | |
| Categorized token => KleeneStarAlgebra (RegEx token) Source # | |
| (Alternative f, Monoid k) => KleeneStarAlgebra (Ap f k) Source # | |
orK :: (Foldable f, KleeneStarAlgebra k) => f k -> k Source #
cumulative alternation
anyK :: (Foldable f, KleeneStarAlgebra k) => (a -> k) -> f a -> k Source #
existential
TokenAlgebra
class Tokenized token p => TokenAlgebra token p where Source #
TokenAlgebra extends Tokenized methods to support
BooleanAlgebra operations within a tokenClass.
When a TokenAlgebra is an Alternative,
then tokenClass is expected to act homomorphically on disjunction.
empty = tokenClass falseB
tokenClass x <|> tokenClass y = tokenClass (x >||< y)
Minimal complete definition
Nothing
Methods
tokenClass :: TokenClass token -> p Source #
default tokenClass :: forall (q :: Type -> Type -> Type). (p ~ q token token, Alternator q, Cochoice q) => TokenClass token -> p Source #
Instances
RegEx & TokenClass
The RegExpression type forms the prototypical KleeneStarAlgebra.
It is also a TokenAlgebra, such that the following invariants hold.
zeroK = tokenClass falseB
tokenClass x >|< tokenClass y = tokenClass (x >||< y)
Constructors
| SeqEmpty | |
| Sequence (RegEx token) (RegEx token) | |
| NonTerminal String | |
| KleeneStar (RegEx token) | |
| KleeneOpt (RegEx token) | |
| KleenePlus (RegEx token) | |
| RegExam (RegExam token (RegEx token)) |
Instances
newtype TokenClass token Source #
TokenClass forms a Tokenized BooleanAlgebra,
such that the following invariants hold.
trueB = anyToken
trueB = notOneOf []
falseB = oneOf []
notB . oneOf = notOneOf
notB . notOneOf = oneOf
notB . asIn = notAsIn
notB . notAsIn = asIn
Constructors
| TokenClass (RegExam token (TokenClass token)) |
Instances
| Categorized token => TokenAlgebra token (TokenClass token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods tokenClass :: TokenClass token -> TokenClass token Source # | |||||
| Categorized token => Tokenized token (TokenClass token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods anyToken :: TokenClass token Source # token :: token -> TokenClass token Source # oneOf :: Foldable f => f token -> TokenClass token Source # notOneOf :: Foldable f => f token -> TokenClass token Source # asIn :: Categorize token -> TokenClass token Source # notAsIn :: Categorize token -> TokenClass token Source # | |||||
| Categorized token => TokenAlgebra token (RegExam token (TokenClass token)) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods tokenClass :: TokenClass token -> RegExam token (TokenClass token) Source # | |||||
| Generic (TokenClass token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Associated Types
Methods from :: TokenClass token -> Rep (TokenClass token) x # to :: Rep (TokenClass token) x -> TokenClass token # | |||||
| (Categorized token, Read token, Read (Categorize token)) => Read (TokenClass token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods readsPrec :: Int -> ReadS (TokenClass token) # readList :: ReadS [TokenClass token] # readPrec :: ReadPrec (TokenClass token) # readListPrec :: ReadPrec [TokenClass token] # | |||||
| (Categorized token, Show token, Show (Categorize token)) => Show (TokenClass token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods showsPrec :: Int -> TokenClass token -> ShowS # show :: TokenClass token -> String # showList :: [TokenClass token] -> ShowS # | |||||
| Categorized token => BooleanAlgebra (TokenClass token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods (>&&<) :: TokenClass token -> TokenClass token -> TokenClass token Source # (>||<) :: TokenClass token -> TokenClass token -> TokenClass token Source # notB :: TokenClass token -> TokenClass token Source # trueB :: TokenClass token Source # falseB :: TokenClass token Source # | |||||
| Categorized token => Eq (TokenClass token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods (==) :: TokenClass token -> TokenClass token -> Bool # (/=) :: TokenClass token -> TokenClass token -> Bool # | |||||
| Categorized token => Ord (TokenClass token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods compare :: TokenClass token -> TokenClass token -> Ordering # (<) :: TokenClass token -> TokenClass token -> Bool # (<=) :: TokenClass token -> TokenClass token -> Bool # (>) :: TokenClass token -> TokenClass token -> Bool # (>=) :: TokenClass token -> TokenClass token -> Bool # max :: TokenClass token -> TokenClass token -> TokenClass token # min :: TokenClass token -> TokenClass token -> TokenClass token # | |||||
| Categorized token => BooleanAlgebra (RegExam token (TokenClass token)) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods (>&&<) :: RegExam token (TokenClass token) -> RegExam token (TokenClass token) -> RegExam token (TokenClass token) Source # (>||<) :: RegExam token (TokenClass token) -> RegExam token (TokenClass token) -> RegExam token (TokenClass token) Source # notB :: RegExam token (TokenClass token) -> RegExam token (TokenClass token) Source # trueB :: RegExam token (TokenClass token) Source # falseB :: RegExam token (TokenClass token) Source # | |||||
| type Rep (TokenClass token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene type Rep (TokenClass token) = D1 ('MetaData "TokenClass" "Control.Lens.Grammar.Kleene" "distributors-0.6.0.0-GKdjtvrzrF55FdERGi3FK3" 'True) (C1 ('MetaCons "TokenClass" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (RegExam token (TokenClass token))))) | |||||
data RegExam token alg Source #
A component of both RegExpressions and TokenClasses,
so that the latter can be embedded in the former with tokenClass.
Instances
| Generic1 (RegExam token :: Type -> Type) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Associated Types
| |||||
| Categorized token => TokenAlgebra token (RegExam token (TokenClass token)) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods tokenClass :: TokenClass token -> RegExam token (TokenClass token) Source # | |||||
| Categorized token => Tokenized token (RegExam token alg) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods anyToken :: RegExam token alg Source # token :: token -> RegExam token alg Source # oneOf :: Foldable f => f token -> RegExam token alg Source # notOneOf :: Foldable f => f token -> RegExam token alg Source # asIn :: Categorize token -> RegExam token alg Source # notAsIn :: Categorize token -> RegExam token alg Source # | |||||
| Foldable (RegExam token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods fold :: Monoid m => RegExam token m -> m # foldMap :: Monoid m => (a -> m) -> RegExam token a -> m # foldMap' :: Monoid m => (a -> m) -> RegExam token a -> m # foldr :: (a -> b -> b) -> b -> RegExam token a -> b # foldr' :: (a -> b -> b) -> b -> RegExam token a -> b # foldl :: (b -> a -> b) -> b -> RegExam token a -> b # foldl' :: (b -> a -> b) -> b -> RegExam token a -> b # foldr1 :: (a -> a -> a) -> RegExam token a -> a # foldl1 :: (a -> a -> a) -> RegExam token a -> a # toList :: RegExam token a -> [a] # null :: RegExam token a -> Bool # length :: RegExam token a -> Int # elem :: Eq a => a -> RegExam token a -> Bool # maximum :: Ord a => RegExam token a -> a # minimum :: Ord a => RegExam token a -> a # | |||||
| Traversable (RegExam token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods traverse :: Applicative f => (a -> f b) -> RegExam token a -> f (RegExam token b) # sequenceA :: Applicative f => RegExam token (f a) -> f (RegExam token a) # mapM :: Monad m => (a -> m b) -> RegExam token a -> m (RegExam token b) # sequence :: Monad m => RegExam token (m a) -> m (RegExam token a) # | |||||
| Functor (RegExam token) Source # | |||||
| Generic (RegExam token alg) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Associated Types
| |||||
| (Categorized token, Read token, Read alg, Read (Categorize token)) => Read (RegExam token alg) Source # | |||||
| (Categorized token, Show token, Show alg, Show (Categorize token)) => Show (RegExam token alg) Source # | |||||
| Categorized token => BooleanAlgebra (RegExam token (TokenClass token)) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods (>&&<) :: RegExam token (TokenClass token) -> RegExam token (TokenClass token) -> RegExam token (TokenClass token) Source # (>||<) :: RegExam token (TokenClass token) -> RegExam token (TokenClass token) -> RegExam token (TokenClass token) Source # notB :: RegExam token (TokenClass token) -> RegExam token (TokenClass token) Source # trueB :: RegExam token (TokenClass token) Source # falseB :: RegExam token (TokenClass token) Source # | |||||
| (Categorized token, Eq alg) => Eq (RegExam token alg) Source # | |||||
| (Categorized token, Ord alg) => Ord (RegExam token alg) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods compare :: RegExam token alg -> RegExam token alg -> Ordering # (<) :: RegExam token alg -> RegExam token alg -> Bool # (<=) :: RegExam token alg -> RegExam token alg -> Bool # (>) :: RegExam token alg -> RegExam token alg -> Bool # (>=) :: RegExam token alg -> RegExam token alg -> Bool # max :: RegExam token alg -> RegExam token alg -> RegExam token alg # min :: RegExam token alg -> RegExam token alg -> RegExam token alg # | |||||
| type Rep1 (RegExam token :: Type -> Type) Source # | |||||
Defined in Control.Lens.Grammar.Kleene type Rep1 (RegExam token :: Type -> Type) = D1 ('MetaData "RegExam" "Control.Lens.Grammar.Kleene" "distributors-0.6.0.0-GKdjtvrzrF55FdERGi3FK3" 'False) (C1 ('MetaCons "OneOf" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set token))) :+: (C1 ('MetaCons "NotOneOf" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set token)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (CategoryTest token))) :+: C1 ('MetaCons "Alternate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1 :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) Par1))) | |||||
| type Rep (RegExam token alg) Source # | |||||
Defined in Control.Lens.Grammar.Kleene type Rep (RegExam token alg) = D1 ('MetaData "RegExam" "Control.Lens.Grammar.Kleene" "distributors-0.6.0.0-GKdjtvrzrF55FdERGi3FK3" 'False) (C1 ('MetaCons "OneOf" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set token))) :+: (C1 ('MetaCons "NotOneOf" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set token)) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (CategoryTest token))) :+: C1 ('MetaCons "Alternate" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 alg) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 alg)))) | |||||
data CategoryTest token Source #
CategoryTests for Categorized tokens.
Constructors
| AndAsIn (Categorize token) | |
| AndNotAsIn (Set (Categorize token)) |
Instances
| Generic (CategoryTest token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Associated Types
Methods from :: CategoryTest token -> Rep (CategoryTest token) x # to :: Rep (CategoryTest token) x -> CategoryTest token # | |||||
| (Categorized token, Read token, Read (Categorize token)) => Read (CategoryTest token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods readsPrec :: Int -> ReadS (CategoryTest token) # readList :: ReadS [CategoryTest token] # readPrec :: ReadPrec (CategoryTest token) # readListPrec :: ReadPrec [CategoryTest token] # | |||||
| (Categorized token, Show token, Show (Categorize token)) => Show (CategoryTest token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods showsPrec :: Int -> CategoryTest token -> ShowS # show :: CategoryTest token -> String # showList :: [CategoryTest token] -> ShowS # | |||||
| Categorized token => Eq (CategoryTest token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods (==) :: CategoryTest token -> CategoryTest token -> Bool # (/=) :: CategoryTest token -> CategoryTest token -> Bool # | |||||
| Categorized token => Ord (CategoryTest token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene Methods compare :: CategoryTest token -> CategoryTest token -> Ordering # (<) :: CategoryTest token -> CategoryTest token -> Bool # (<=) :: CategoryTest token -> CategoryTest token -> Bool # (>) :: CategoryTest token -> CategoryTest token -> Bool # (>=) :: CategoryTest token -> CategoryTest token -> Bool # max :: CategoryTest token -> CategoryTest token -> CategoryTest token # min :: CategoryTest token -> CategoryTest token -> CategoryTest token # | |||||
| type Rep (CategoryTest token) Source # | |||||
Defined in Control.Lens.Grammar.Kleene type Rep (CategoryTest token) = D1 ('MetaData "CategoryTest" "Control.Lens.Grammar.Kleene" "distributors-0.6.0.0-GKdjtvrzrF55FdERGi3FK3" 'False) (C1 ('MetaCons "AndAsIn" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Categorize token))) :+: C1 ('MetaCons "AndNotAsIn" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 (Set (Categorize token))))) | |||||