Re: Iteratee-based IO and lightweight monadic

From: "Artyom Shalkhakov"
Hello,
Is anybody planning to use these shiny new ways for doing IO?
I'm also interested in a fair comparison of ByteString/Binary with iteratee-based IO. Has anybody done this?
I would like to use Iteratee-based IO, and have been doing some experiments with it recently for my problem domain (reading sound files). There has been a discussion recently on the haskell-art list about this specific topic. I posted some timing/memory data, and links to my test code, which you should be able to find in the archives if you're interested. I have found that, with my specific implementations and test case, Iteratee-based IO is slightly slower than the most performant ByteString/Binary code I used, however it uses significantly less memory and has nice composability. Also note that my ByteString-based reader actually reads strict ByteStrings and outputs a stream of UArr Doubles (from the uvector package) using unsafeInterleaveIO rather than using lazy ByteStrings directly. Other implementations made different choices, which I covered in some detail in the mentioned thread. Oleg has recently (after I did my tests) published a small library for reading TIFF files using Iteratees. This new code offers some significant advantages over what I was doing with Iteratees, and may offer performance benefits. More work for me... Unfortunately, neither approach (Iteratee nor ByteString) is yet competitive with hsndfile/libsndfile. However, an Iteratee layer that uses hsndfile to read could be implemented, giving the benefits of the Iteratee approach with high performance. I believe the hsndfile authors are interested in this. It should be very easy to implement.
participants (1)
-
John Lato