
felipe.lessa:
I've written it to run over lists, but it would not be difficult to make it run over ByteStrings instead, and exploit the 'no-copying' effect on the bits of the stream which were not modified, which would be very handy for programs processing large bytestrings.
I wonder if there's a efficient way of writting generic code that runs over String or over ByteString? Or at least with Lazy and Strict ByteStrings?
I mean, I can write something like
double :: Num a => a -> a double x = x * 2
and, e.g. if I want speed on Doubles (and am using GHC)
{-# SPECIALIZE double :: Double -> Double #-}
but AFAIK there isn't a way of doing so with all the string types?
And, if we're really lacking these mechanisms, is it because of a lack of formulation or because it isn't possible to generalise String operations?
Thanks! =)
The String API seems rather large, so finding a single type class to encapsulate expected operations tends to produce big, unwieldly classes. Smaller apis work though: Monoid, for example. -- Don