[Haskell-cafe] Low-level idea: Aligned tagged ByteArray#

Zemyla zemyla at gmail.com
Thu Aug 3 23:16:27 UTC 2017


I had an idea for a way to attach small-but-necessary amounts of
information to a ByteArray# or MutableByteArray# (and potentially also
to Array# and ArrayArray#). The type would look something like
"TaggedByteArray# 8#".

This, for instance, would represent the address of a primitive array
of bytes, with an alignment of 8, and with the last 3 bits having a
number between 0 and 7 in them. Code to access the elements of the
ByteArray# would disregard the last bits, and the garbage collector
would simply ensure that the tag was retained after collection passes.
"ByteArray#" itself would simply become an alias for "TaggedByteArray#
1#", and the existing functions would have their types changed to work
with the new TaggedByteArray#s.

The primary potential problems I see are how to have a KnownNat-style
typeclass before Integer is defined, and how to store both the array
and the tag in an ArrayArray#.


More information about the Haskell-Cafe mailing list