unpin a mutable byte array
Sometimes, it necessary to allocate a mutable byte array as pinned. This commonly happens when the mutable byte array will immidiately be handed over to a
safe FFI routine to be initialized. However, after it has been initialized, it might not be useful for it to be pinned anymore. If it's a little byte array, it may contribute to a fragmented heap. Even if it's large, the fact that the user explicitly asked pin it prohibits it from ever being added to a compact region (pinned bytearrays that were pinned simply because they are over 3KB can be added to compact regions). A workaround for either of these problems is to copy the pinned bytearray into an unpinned byte array afterwards. But that's kind of wasteful. Is it possible to have a primop
unpinMutableByteArray :: MutableByteArray s -> State# s -> State# s
After this, the mutable byte array could be moved in memory. This would require
isMutableByteArrayPinned# to undergo a similar transition as
sizeofMutableByteArray# (which was superceeded by
Is this possible? Or are pinned things allocated in a special place that makes unpinning impossible?