
Folks, How is one to interpret the following? I'm particularly interested in the "IO $ \ s -> " notatoin as I have never seen that before. allocaBytes :: Int -> (Ptr a -> IO b) -> IO b allocaBytes (I# size) action = IO $ \ s -> case newPinnedByteArray# size s of { (# s, mbarr# #) -> case unsafeFreezeByteArray# mbarr# s of { (# s, barr# #) -> let addr = Ptr (byteArrayContents# barr#) in case action addr of { IO action -> case action s of { (# s, r #) -> case touch# barr# s of { s -> (# s, r #) }}}}} Lemmih suggested that this is unrolling the code (manual inlining?) but how much speedup is that buying you? Last but not least, what is case action addr of { IO action -> case action s of { (# s, r #) -> Thanks, Joel -- http://wagerlabs.com/