A module containing semi-public StorableVector internals. This exposes
the StorableVector representation and low level construction functions.
Modules which extend the StorableVector system will need to use this module
while ideally most users will be able to make do with the public interface
modules.

Unsafe Vector index (subscript) operator, starting from 0, returning a
single element. This omits the bounds check, which means there is an
accompanying obligation on the programmer to ensure the bounds are checked in
some other way.

Given the maximum size needed and a function to make the contents
of a Vector, createAndTrim makes the Vector. The generating
function is required to return the actual final size (<= the maximum
size), and the resulting byte array is realloced to this size.

createAndTrim is the main mechanism for creating custom, efficient
Vector functions, using Haskell or C functions to fill the space.

A way of creating Vectors outside the IO monad. The Int
argument gives the final size of the Vector. Unlike
createAndTrim the Vector is not reallocated if the final size
is less than the estimated size.

Just like unsafePerformIO, but we inline it. Big performance gains as
it exposes lots of things to further inlining. Very unsafe. In
particular, you should do no memory allocation inside an
inlinePerformIO block. On Hugs this is just unsafePerformIO.