regex-applicative-0.3.4: Regex-based parsing with applicative interface

Copyright | (c) Roman Cheplyaka
License | MIT
Maintainer | Roman Cheplyaka <roma@ro-che.info>
Stability | experimental
Safe Haskell | Safe-Inferred
Language | Haskell2010

Text.Regex.Applicative.Object

Description

This is a low-level interface to the regex engine.

Synopsis

- 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

data ReObject s r Source #

The state of the engine is represented as a "regex object" of type ``ReObject` s r`, where `s` 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)

data Thread s r Source #

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`.

isResult :: Thread s r -> Bool Source #

Check whether a thread is a result thread

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

data ThreadId Source #

threadId :: Thread s r -> Maybe ThreadId Source #

Returns thread identifier. This will be `Just` for ordinary threads and `Nothing` for results.

step :: s -> ReObject s r -> ReObject s r Source #

Feed a symbol into a regex 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.

addThread :: Thread s r -> ReObject s r -> ReObject s r Source #

Add a thread to an object. The new thread will have lower priority than the threads which are already in the object.

If a (non-result) thread with the same id already exists in the object, the object is not changed.