
Hi all, I'm writing a parser for a binary format, and I'm trying to debug it since I have a bug and the code is getting lost in the bits and bytes. Basically my main is like this: import Data.Binary.Get import Debug.Trace import qualified Data.ByteString.Lazy as L main = do bytes <- L.readFile "song.gp4" let (version, bytes') = getVersion bytes putStrLn version let stuff = runGet (getDocument version) bytes' putStrLn $ show stuff return () The getVersion and getDocument functions use the Data.Binary.Get monad to decode the byte string into various objects. I tried sprinkling "trace" calls a bit everywhere and I realize they don't always get called at the expected time. Most of them are only called when I reach the "putStrLn $ show stuff" statement. Unfortunately that doesn't help me because I get a *** Exception: too few bytes. Failed reading at byte position 35939 before that. Is this happening because I'm using lazy IO to read the file? Is there a way to force the evaluation of these "trace" calls? Are there any other ways to debug this kind of stuff in Haskell? Thanks a lot, Patrick -- ===================== Patrick LeBoutillier Rosemère, Québec, Canada