[Haskell-cafe] intercalate and (byte)strings

Neil Mitchell ndmitchell at gmail.com
Tue Dec 23 03:59:27 EST 2008


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


More information about the Haskell-Cafe mailing list