Combinators for constructing NFA's that recognize and compute functions on regular languages in linear time.
The core type is
P s a: a parser for a stream of
s's that results in an
P s a is
Alternative, and can be composed as you'd expect.
P s a's are like regular expressions, only more powerful. To give you an idea, the following primitive is defined:
parallel :: P s a -> P s b -> P s (a, b)
Some ideas for functionality are taken from regex-applicative.