Skip to content

Add support for boxed but unlifted element types to Primitive.Array #419

Open
@dcoutts

Description

Right now, P.Array supports only lifted types (types of kind *)

ghci> :kind Data.Primitive.Array.Array GHC.Exts.ByteArray#

<interactive>:1:28: error: [GHC-83865]
    • Expected a lifted type, but ‘ByteArray#’ is a boxed unlifted type
    • In the first argument of ‘Data.Primitive.Array.Array’, namely
        ‘ByteArray#’
      In the type ‘Data.Primitive.Array.Array ByteArray#’

But, in recent GHC versions, the underlying Array# type supports any boxed (lifted or unlifted) type:

ghci> :kind GHC.Exts.Array# GHC.Exts.ByteArray#
GHC.Exts.Array# GHC.Exts.ByteArray# :: ghc-prim:GHC.Types.UnliftedType

The primitive array type should be similarly extended to support this.

It would be very useful, to reduce allocations and indirections (and easily enforce strictness) when using types like ByteArray#. In particular it would support higher level libraries like vector to provide useful Unbox instances for the wrapper types like ByteArray.

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Type

    No type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions