
Ross Paterson wrote:
On Mon, Mar 05, 2007 at 03:51:47PM +0000, Chris Kuklewicz wrote:
I would like to announce new versions of the regex-* packages. [...] Porting the backends to other Haskell compilers should be possible, though they may not support the polymorphic type class API that regex-base provides.
Some of the instances in regex-base rely on late overlapping resolution, which is a GHC-only feature. That is, instances overlap, with neither subsuming the other, but they're only used outside of the overlap.
I think I will update the "unstable" regex-base with newtypes to separate the instance.
The overlap occurs in the following groups of instances:
These problems exists because 'b' in (RegexLike a b) is always an Extract instance and I cannot simply specify that the third parameter to RegexContext is "Not an Extract instance" . For reference:
type MatchArray = Array Int (MatchOffset, MatchLength)
hmmm.... Imaginary new syntax: notInstance Extract (MatchOffset, MatchLength) would fix MatchArray from overlapping with (Extract b => Array Int b) I will cook up some newtype's and update regex-base. I only get one "list of _" instance. Since MatchArray is part of the underlying machinery, I think I will choose [MatchArray]. Overlap where b == (MatchOffset, MatchLength) newtype/update:
instance (RegexLike a b) => RegexContext a b (Array Int b) keep: instance (RegexLike a b) => RegexContext a b MatchArray
Overlap where b == (MatchOffset, MatchLength) newtype/update:
instance (RegexLike a b) => RegexContext a b [Array Int b] keep: instance (RegexLike a b) => RegexContext a b [MatchArray]
Overlap where b == (MatchOffset, MatchLength) newtype/update:
instance (RegexLike a b) => RegexContext a b [b] keep: instance (RegexLike a b) => RegexContext a b [(MatchOffset,MatchLength)]
Overlap where b == (MatchArray) newtype/update:
instance (RegexLike a b) => RegexContext a b [b] keep: instance (RegexLike a b) => RegexContext a b [MatchArray]
(MatchArray is a synonym for Array Int (MatchOffset, MatchLength))
Apart from that, this package (and thus the others, with a few #ifdef's) would work with Hugs. How about eliminating the above overlaps?