neil: > Hi, > > Firstly my apologies if this is an outrageously newbie question. > > I am trying to write a binary protocol parser using Data.ByteString. I > have created a module "ByteParser" containing my parsing utilities, which > imports ByteString as: > > import qualified Data.ByteString as B > > In my Main module, where all the IO happens, I want to use lazy > ByteStrings so I ask for the following imports: > > import ByteParser > import qualified Data.ByteString.Lazy as L > > The problem is that when I try to call a function in ByteParser with an > L.ByteString, the compiler complains that: > > Couldn't match expected type `Data.ByteString.Base.ByteString' > against inferred type `L.ByteString' > > Does this mean that the lazy version of ByteString is a completely > separate, incompatible type from the base version? Obviously I can work
Yes, they're completely different. One is a strict, unboxed array of bytes. The other is a lazy list of cache-sized array chunks. You can convert between the two. But usually its best to pick one and stick to it. > around this problem by making ByteParser import Data.ByteString.Lazy > instead of Data.ByteString, but then ByteParser would not be able to work > with strict ByteStrings. Ideally I would like ByteParser to be agnostic > about the use of lazy versus strict ByteStrings. Is this a sensible and/or > possible thing to do? You could make your binary parser polymorphic on the string type, and used a String class that both bytestrings are instances of. -- Don _______________________________________________ Haskell-Cafe mailing list [email protected] http://www.haskell.org/mailman/listinfo/haskell-cafe
