[Haskell] Re: ANN: TextRegexLazy 0.44
Chris Kuklewicz
haskell at list.mightyreason.com
Fri Jul 14 12:05:50 EDT 2006
Bulat Ziganshin wrote:
> Hello Chris,
>
> Thursday, July 13, 2006, 12:17:30 PM, you wrote:
>
>>>> Question 2: Is there interest in getting this into an official release of the
>>>> base libraries? The Compat module could at least replace or sit alongside the
>>>> performance sink of the current Text.Regex code.
>>> i'm 120% want to see ByteString, regular expressions matching for
>>> String and ByteString, and JRegex (=~ operator implementation) to be
>>> included in GHC 6.6
>
>> That typeclass interface is very handy, BUT it expects the thing being matched
>> against is a list of something. This prevents making ByteString an instance of
>> RegexLike.
>
>> The answer will be to alter the type class to not make such an assumption.
>> Luckily John Meacham put JRegex under the 3 clause BSD, so I will
>> * Make a modified version of the type classes
>> * Make Text.Regex.Lazy an instance of these type classes
>> * Port JRegex to be instances of these type classes (links to PCRE!)
>> Then I or someone else can
>> * Implement an efficient instance of Bytestring being handled by PCRE.
>
> regexps support for ByteStrings already exists:
>
> ========================================================================
>> btw, what will be really useful now, imho, is the interface to
>> Text.Regex. how about working on it as next stage?
>
> This is already done actually, here:
> http://www.cse.unsw.edu.au/~dons/code/lambdabot/Lib/Regex.hsc
> http://www.cse.unsw.edu.au/~dons/code/hmp3/Regex.hsc
> ========================================================================
Thanks, I'll go take a look at that. I have pcre + JRegex installed now. And I
have a remote darcs repository with my current version imported. (URL coming
after I am sure it won't get re-organized).
>
> well, i'm just dumb user telling what i want to see in GHC 6.6:
>
> * regexp matching for Strings and ByteStrings
> * perl-like syntax for doing it
> * ability to select regexp engine for each matching operation and
> using of most efficient ones (Lazy for String, posix or pcre (?) for
> ByteString) by default
>
> i also know that Simon Marlow want to see JRegex(-like) engine
> included in 6.6 (see http://hackage.haskell.org/trac/ghc/ticket/710 )
>
> what you mentioned is just implementation details for me, the dumb user :)
As a user, the JRegex API can also only support a single Regex type and a single
backend. But it would be really handy to be able to use different types of
regular expressions. Mainly there are going to be different regex syntax
possibilities:
* Old Text.Regex syntax, also emulated by Text.Regex.Lazy.Compat
* The "Full" syntax of Text.Regex.Lazy (close to Extended regex)
* regex.h syntax (perhaps Basic as well as Extended)
* pcre.h syntax
All of these might conceivably come in [Word8] and [Char] sources.
The backend will vary: at least because we will want both a Lazy version and a
hand-off to pcre library version (if installed) or regex library (more likely to
be installed).
And the plan is to generalize the target to be either [Char] or ByteString.
New Question: What do people think is the best way to use data/newtype/class to
allow for
1) Different regex syntax as different types
2) Different target [Char] or ByteString
3) Different engine in the back end.
My first thought is that the type of the regex encodes both which syntax is in
use and which back-end will be used. Something like
"Hello" =~ (pcre "el+")
would use PCRE syntax and pcre library backend against the [Char]. And
(pack "Hello") =~ (compatRE "el+")
Would use the old Text.Regex syntax and my lazy backend against the ByteString
produced by pack.
Other answers?
--
Chris
More information about the Haskell
mailing list