
On Sun, 2011-01-16 at 21:39 -0700, Roderick Ford wrote:
I wrote this little clip, and haven't been able to figure out why the L.ByteString is different type than Data.ByteString.Internal.ByteString, or if I am just doing everything wrong here.
This is definitely confusing. Types called ByteString are exported from all of the following modules: Data.ByteString Data.ByteString.Char8 Data.ByteString.Internal Data.ByteString.Lazy Data.ByteString.Lazy.Char8 Data.ByteString.Lazy.Internal IIRC, the first three are all the same type, and the last three are all the same type. But the types from the first and last groups are NOT the same. You typically import ByteString qualified anyway... and it's normal to import any of the first set with qualfied name "B", "S", or "SB". The last set is typically imported qualified as "L" or "LB". Here, the S and L stand for "strict" and "lazy". If you need to convert between them, there is: L.toChunks :: L.ByteString -> [S.ByteString] L.fromChunks :: [S.ByteString] -> L.ByteString S.concat :: [S.ByteString] -> S.ByteString Keep in mind that concatenating very large, or a very large number of, strict ByteStrings can be expensive. -- Chris Smith