Hello! Why copyCStringLen :: CStringLen -> ByteString? It seems pretty dangerous, because at the time of forcing (copyCStringLen csLen), csLen may no longer be valid. I think it would be better if this and other similar functions returned their results in the IO monad. Best regards Tomasz