Bulat Ziganshin wrote: >>> there are also many other similar issues, such as lack of good syntax >>> for "for", "while", "break" and other well-known statements, > >> On the other hand you have an ability to define your own control >> structures. > > i have a lot, but their features are limited, both in terms of > automatic lifting and overall syntax. let's consider > > while (hGetBuf h buf bufsize == bufsize) > crc := updateCrc crc buf bufsize > break if crc==0 > print crc
I guess that the crc is a simple fold over the single bytes: crc xs = foldl' (\crc word8 -> crc `xor` word8) 0 xs You do not need xs to be an inefficient String, Data.ByteString.Lazy gives you single byte access (f.i. via fold) but internally reads stuff in a chunked way, just like you now manually do with hGetBuf. Lazy evaluation is very handy for separating those the two concerns of reading the chunks of bytes and presenting them in a non-chunked way. Regards, apfelmus _______________________________________________ Haskell-Cafe mailing list Haskell-Cafe@haskell.org http://www.haskell.org/mailman/listinfo/haskell-cafe