Copyright | (c) Roman Cheplyaka |
---|---|
License | MIT |
Maintainer | Roman Cheplyaka <roma@ro-che.info> |
Stability | experimental |
Safe Haskell | Safe-Inferred |
Language | Haskell2010 |
This is a low-level interface to the regex engine.
- data ReObject s r
- compile :: RE s r -> ReObject s r
- emptyObject :: ReObject s r
- data Thread s r
- threads :: ReObject s r -> [Thread s r]
- failed :: ReObject s r -> Bool
- isResult :: Thread s r -> Bool
- getResult :: Thread s r -> Maybe r
- results :: ReObject s r -> [r]
- data ThreadId
- threadId :: Thread s r -> Maybe ThreadId
- step :: s -> ReObject s r -> ReObject s r
- stepThread :: s -> Thread s r -> [Thread s r]
- fromThreads :: [Thread s r] -> ReObject s r
- addThread :: Thread s r -> ReObject s r -> ReObject s r
Documentation
The state of the engine is represented as a "regex object" of type
, where ReObject
s rs
is the type of symbols and r
is the
result type (as in the RE
type). Think of ReObject
as a collection of
Thread
s ordered by priority. E.g. threads generated by the left part of
<|>
come before the threads generated by the right part.
compile :: RE s r -> ReObject s r Source
Compile a regular expression into a regular expression object
emptyObject :: ReObject s r Source
Empty object (with no threads)
A thread either is a result or corresponds to a symbol in the regular expression, which is expected by that thread.
threads :: ReObject s r -> [Thread s r] Source
List of all threads of an object. Each non-result thread has a unique id.
failed :: ReObject s r -> Bool Source
Check if the object has no threads. In that case it never will
produce any new threads as a result of step
.
getResult :: Thread s r -> Maybe r Source
Return the result of a result thread, or Nothing
if it's not a result
thread
results :: ReObject s r -> [r] Source
Extract the result values from all the result threads of an object
stepThread :: s -> Thread s r -> [Thread s r] Source
Feed a symbol into a non-result thread. It is an error to call stepThread
on a result thread.
fromThreads :: [Thread s r] -> ReObject s r Source
Create an object from a list of threads. It is recommended that all
threads come from the same ReObject
, unless you know what you're doing.
However, it should be safe to filter out or rearrange threads.