kr.angelov: > I had the same problem (stack overflow). The solution was to change > the >>= operator in the Get monad. Currently it is: > > m >>= k = Get (\s -> let (a, s') = unGet m s > in unGet (k a) s') > > but I changed it to: > > m >>= k = Get (\s -> case unGet m s of > (a, s') -> unGet (k a) s') > > It seems that the bind operator is lazy and this caused the stack overflow.
Hmm. That's interesting. I'm not sure that doesn't change other things we rely on though. > I have also another problem. Every Int and Word is stored as 64-bit > value and this expands the output file a lot. I have a lot of integers > and most of them are < 128 but not all of them. I changed the > serialization so that the Int and Word are serialized in a variable > number of bytes. Without this change the binary serialization was even > worse than the textual serialization that we had before. The file was > almost full with zeros. The motivation for this is to use zlib compress / decompress. E.g. writeFile "f" . compress . encode $ foo > I just haven't time to prepare a patch and to send it for review but > if other people have the same problem I will do it. > Patches welcome. You shouldn't need to patch a library like this, it should be able to do what you need. -- Don _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe