
Hi George,
I don't understand your example of the bit consumer and IORefs though...could you explain it a bit more (no pun)?
See the message I just posted the libraries list for a better example. http://haskell.org/pipermail/libraries/2003-May/001006.html
Why not use a state transformer on top of IO or something like that?
Another one would be where you want to read some data from an untrusted client, limiting the number of bytes you can be bothered to read. This could be done using my framework by extending the monad with a count, it can't be done in Malcolm's framework, at least not without introducing an extra first step to do the IO.
Hrm, this is interesting :). It seems like you should be able to use lazyGet to achieve this. Opening a BinIO doesn't actually cause it to be read until you actually do some of the reading. Using lazyGet should enable you to just read the amount you need to read under certain circumstances. I envision something like: newtype UntrustedString = UntrustedString String instance Binary UntrustedString where put_ bh (UntrustedString s) = put_ bh s -- put_ is trusted get bh = do s <- lazyGet bh let s' = deepSeq $ take 20 s s' `seq` closeHandle bh return (UntrustedString s') or something like that (untested, of course).