The Stereo constructor is exclusively used
for constructing the peek function,
whereas the accessors in the element calls
are used for assembling the poke function.
It is required that the order of arguments of Stereo
matches the record accessors in the element calls.
If you want that the stored data correctly and fully represents
your Haskell data, it must hold:

Stereo (left x) (right x) = x .

Unfortunately this cannot be checked automatically.
However, mismatching types that are caused by swapped arguments
are detected by the type system.
Our system performs for you:
Size and alignment computation, poking and peeking.
Thus several inconsistency bugs can be prevented using this package,
like size mismatching the space required by poke actions.
There is no more restriction,
thus smart constructors and accessors
and nested records work, too.
For nested records however,
I recommend individual Storable instances for the sub-records.

You see it would simplify class instantiation
if we could tell the class dictionary at once
instead of defining each method separately.