
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! =) -- Felipe.