
On Fri, Mar 10, 2017 at 2:24 AM, Chris Dornan
By the sounds of it regex should help with this – each match operator being available in an un-overloaded format. Does this API work for you?
I looked at the tutorial and.... maybe not so much? I hardcode to Text + PCRE since that's all I need, but that combination seems to be unsupported. As a light user of regexes, I won't remember much of the API between uses, so I'm just looking to find the 'Regex -> Text -> Bool' function as fast as possible, and a bunch of polymorphic operators I'll never remember would just get in the way. Also for the same reason I'd be worried about any deviation from "standard" PCRE, e.g. $(..) for groups. However, I'm a lightweight user, so don't take me too seriously, and I made my own tiny little bikeshed anyway. Which is to say don't let me rain on your parade :) For what it's worth, I mostly used regexes in python, and it gets along fine with hardcoded Text + PCRE, no operators, and basically three functions: match, get groups, and substitute groups. So it's no surprise my wrapper basically looks like that: compileOptions :: [Option] -> String -> Either String Regex matches :: Regex -> Text -> Bool -- | Return (complete_match, [group_match]). groups :: Regex -> Text -> [(Text, [Text])] -- | Half-open ranges of where the regex matches. groupRanges :: Regex -> Text -> [((Int, Int), [(Int, Int)])] -- ^ (entire, [group]) substitute :: Regex -> (Text -> [Text] -> Text) -- ^ (complete_match -> groups -> replacement) -> Text -> Text I also added a Show instance that shows the regex rather than hex and the mysteriously missing: -- | Escape a string so the regex matches it literally. escape :: String -> String The QuasiQuote stuff seems neat, but I'm sort of scared of TH, and if the regex gets complicated enough that would make it worth it, I probably already switched to a parser. Or I get regexes from user input because of how succinct they are and that's runtime anyway.