Types for dealing with slices of 'ByteArray' and 'MutableByteArray'. These are never supposed to introduce overhead. Rather, they exist to clarify intent in type signatures.
receive :: Resource -- ^ Some scarce resource -> MutableByteArray RealWorld -- ^ Buffer -> Int -- ^ Offset -> Int -- ^ Length -> IO ()
With this library, we instead write
receive :: Resource -- ^ Some scarce resource -> MutableBytes RealWorld -- ^ Buffer -> IO ()
The combination of the worker-wrapper transformation and inlining means that we can expect these two to end up generating the same code in most situations.