
Here's another reason why I think it's better to make the monad used variable (as with my framework but not Malcolm's). The main method I use for encoding binary data needs access to a bit of extra information about what it is encoding it for. This basically can't be done within Malcolm's framework except by, er, parking the extra stuff in a global variable and then using another global lock as otherwise hell will pop when two threads try to use this mechanism at once.
Indeed, this strikes a chord with me since we had exactly this problem in GHC. Fortunately in GHC we're using our own copy of the Binary library, so I was able to hack it to include some extra state in the BinHandle.
This is sufficiently worthwhile to me that I think I shall probably implement it, and then see whether anyone else is interested in using it. I don't think you need any extensions apart from FFI and multi-parameter type-classes,
Please take a look at the Binary library posted to the libraries list a while back, it shows how to do this without using the FFI.
AND some way of writing/reading CChars and CStringLen's to Handles, how do I do this please Simon? hPutChar/hGetChar/hPutBuf/hGetBuf?
Not sure why you want to do that, but hPutBuf can output CStrings. Cheers, Simon