| CARVIEW |
regex-applicative: Regex-based parsing with applicative interface
regex-applicative is a Haskell library for parsing using regular expressions. Parsers can be built using Applicative interface.
[Skip to Readme]
Modules
[Index] [Quick Jump]
Downloads
- regex-applicative-0.3.4.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)
Maintainer's Corner
For package maintainers and hackage trustees
Candidates
- No Candidates
| Versions [RSS] | 0.1, 0.1.1, 0.1.2, 0.1.3, 0.1.4, 0.1.5, 0.2, 0.2.1, 0.3, 0.3.0.1, 0.3.0.2, 0.3.0.3, 0.3.1, 0.3.2, 0.3.2.1, 0.3.3, 0.3.3.1, 0.3.4 |
|---|---|
| Change log | CHANGES.md |
| Dependencies | base (<5), containers, filtrable (>=0.1.3), transformers [details] |
| Tested with | ghc ==8.0.2 || ==8.2.2 || ==8.4.4 || ==8.6.5 || ==8.8.2 |
| License | MIT |
| Author | Roman Cheplyaka |
| Maintainer | Roman Cheplyaka <roma@ro-che.info> |
| Uploaded | by RomanCheplyaka at 2020-07-24T09:45:48Z |
| Category | Text |
| Home page | https://github.com/feuerbach/regex-applicative |
| Source repo | head: git clone git://github.com/feuerbach/regex-applicative.git |
| Distributions | Arch:0.3.4, Debian:0.3.3.1, Fedora:0.3.4, FreeBSD:0.3.2.1, LTSHaskell:0.3.4, NixOS:0.3.4, Stackage:0.3.4 |
| Reverse Dependencies | 25 direct, 19 indirect [details] |
| Downloads | 30570 total (94 in the last 30 days) |
| Rating | 2.5 (votes: 4) [estimated by Bayesian average] |
| Your Rating |
|
| Status | Docs available [build log] Last success reported on 2020-07-24 [all 1 reports] |
Readme for regex-applicative-0.3.4
[back to package description]regex-applicative
regex-applicative is a parsing combinator library for Haskell based on regular expressions.
Example
import Text.Regex.Applicative
data Protocol = HTTP | FTP deriving Show
protocol :: RE Char Protocol
protocol = HTTP <$ string "http" <|> FTP <$ string "ftp"
type Host = String
type Location = String
data URL = URL Protocol Host Location deriving Show
host :: RE Char Host
host = many $ psym $ (/= '/')
url :: RE Char URL
url = URL <$> protocol <* string "://" <*> host <* sym '/' <*> many anySym
main = print $ "https://stackoverflow.com/questions" =~ url
Documentation
See the API reference.
Performance
For common tasks, this package is several times slower than monadic parser combinator libraries like parsec. However, this library has a roughly linear complexity, whereas monadic parser combinators have exponential worst-time complexity (see here).
Some tips to make your regex run faster:
-
If you don't care about the result of the whole regex or its part, only whether it matches or not, mark it with
voidor<$. Recognition is faster than parsing. -
If you apply the same regex to multiple strings, partially apply it like so:
let matcher = match my_regex in map matcher my_stringsThis way the compiled regex is stored in the
matchervalue and shared among the strings.
GHC support
Only GHC versions >= 8.0 are supported, although older versions may work too.