
Hi wman,
-- B == Data.ByteString ; L == Data.ByteString.Lazy contents' = B.intercalate B.empty $ L.toChunks contents
with a previously unencountered function intercalate. A quick google query later i knew that it's just intersperse & concat nicely bundled and started wondering why anybody would do this, as simple
contents' = B.concat $ L.toChunks contents
would do (probably nearly) the same. The only thing I am able to come up with is that it somehow helps streamline the memory usage (if it has some meaning).
Is there some reason to use intercalate <empty> <list> instead of concat <list> (probably when dealing with non-lazy bytestrings) ?
If they do the same thing, no - and I'm pretty sure they are identical. If a much more efficient version of concat was intercalate empty, then the bytestring authors would have just defined: concat = interacalate empty It's best to use the clearest code, always. Performance is something for library authors. (It is sometimes acceptable to use the non clearest code for performance, but it is 100% mandatory to add a comment to that effect!) Thanks Neil