I have seen "strict data structures, lazy functions" bandied about among Haskellers. This is bad advice. Preferable is "know what you are doing."
Streaming via a C API presents a conundrum in Haskell: on the one hand, the C code is side effecting, on the other, we would like to provide a lazy API.
Though there are diverse tools for Haskell development many are not widely advertised; here I collect those I use.
cpkg is now live on Hackage. It is a good deal less polished than I'd originally wanted, but it already gives impressive results (among them cross-compiling XMonad).
The "obvious" way to write a monadic zygomorphism is to look at the definition for an ordinary zygomorphism, namely
prev | next