HORIZON HASKELLDocslts/ghc-10.0.xc7d136e2026-10-12Search names, modules, packages, or :: a typeCtrl K

GHC 10.0.0.20260917 · lts/ghc-10.0.x · c7d136e · 2026-10-12

Moduleprimitive-0.9.1.0

Data.Primitive

  • 13 types
  • 1 class
  • 174 values
datadata ByteArray
#

Lifted wrapper for ByteArray#.

Since ByteArray# is an unlifted type and not a member of kind Type, things like [ByteArray#] or IO ByteArray# are ill-typed. To work around this inconvenience this module provides a standard lifted wrapper, inhabiting Type. Clients are expected to use ByteArray in higher-level APIs, but wrap and unwrap ByteArray internally as they please and use functions from GHC.Exts.

The memory representation of a ByteArray is:

╭─────────────┬───╮  ╭────────┬──────┬─────────╮
│ Constructor │ * ┼─►│ Header │ Size │ Payload │
╰─────────────┴───╯  ╰────────┴──────┴─────────╯

And its overhead is the following:

Where a word is the unit of heap allocation, measuring 8 bytes on 64-bit systems, and 4 bytes on 32-bit systems.

Constructors

Instances10IsList, Eq, Data, Ord, Show, Semigroup, …
  • IsList ByteArrayDefined in base-4.23.0.0 · Data.Array.Byte
  • Eq ByteArrayDefined in base-4.23.0.0 · Data.Array.Byte
  • Data ByteArrayDefined in base-4.23.0.0 · Data.Array.Byte
  • Ord ByteArrayDefined in base-4.23.0.0 · Data.Array.Byte

    Non-lexicographic ordering. This compares the lengths of the byte arrays first and uses a lexicographic ordering if the lengths are equal. Subject to change between major versions.

  • Show ByteArrayDefined in base-4.23.0.0 · Data.Array.Byte
  • Semigroup ByteArrayDefined in base-4.23.0.0 · Data.Array.Byte
  • Monoid ByteArrayDefined in base-4.23.0.0 · Data.Array.Byte
  • NFData ByteArrayDefined in deepseq-1.5.2.0 · Control.DeepSeq
  • Lift ByteArrayDefined in base-4.23.0.0 · Data.Array.Byte
  • type Item ByteArray = Word8Defined in base-4.23.0.0 · Data.Array.Byte
datadata MutableByteArray s
#

Lifted wrapper for MutableByteArray#.

Since MutableByteArray# is an unlifted type and not a member of kind Type, things like [MutableByteArray#] or IO MutableByteArray# are ill-typed. To work around this inconvenience this module provides a standard lifted wrapper, inhabiting Type. Clients are expected to use MutableByteArray in higher-level APIs, but wrap and unwrap MutableByteArray internally as they please and use functions from GHC.Exts.

Instances3Eq, Data, NFData
datadata Ptr a
#

A value of type Ptr a represents a pointer to an object, or an array of objects, which may be marshalled to or from Haskell values of type a.

The type a will often be an instance of class Storable which provides the marshalling operations. However this is not essential, and you can provide your own operations to access the pointer. For example you might write small foreign functions to get or set the fields of a C struct.

Constructors

Instances19NFData1, Generic1, Data, Foldable, Traversable, Storable, …
datadata Array a
#

Constructors

Instances26Monad, Functor, MonadFix, MonadFail, Applicative, Foldable, …
  • Monad ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • Functor ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • MonadFix ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • MonadFail ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • Applicative ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • Foldable ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • Traversable ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • Alternative ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • MonadPlus ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • MonadZip ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • Eq1 ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • Ord1 ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • Read1 ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • Show1 ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • NFData1 ArrayDefined in primitive-0.9.1.0 · Data.Primitive.Array
  • Lift a => Lift (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • IsList (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • Eq a => Eq (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • Data a => Data (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • Ord a => Ord (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • Read a => Read (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • Show a => Show (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • Semigroup (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • Monoid (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • NFData a => NFData (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
  • type Item (Array a) = aDefined in primitive-0.9.1.0 · Data.Primitive.Array
datadata PrimArray a
#

Constructors

Instances9Lift, IsList, Eq, Ord, Show, Semigroup, …
  • Lift (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArray
  • Prim a => IsList (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArray
  • (Eq a, Prim a) => Eq (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArray
  • (Ord a, Prim a) => Ord (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArray
  • (Show a, Prim a) => Show (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArray
  • Semigroup (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArray
  • Monoid (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArray
  • NFData (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArray
  • type Item (PrimArray a) = aDefined in primitive-0.9.1.0 · Data.Primitive.PrimArray
datadata SmallArray a
#

Constructors

Instances26Monad, Functor, MonadFix, MonadFail, Applicative, Foldable, …
classclass Prim a where
#
Instances77Prim, …
  • Prim CBoolDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CCharDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CClockDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CDoubleDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CFloatDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CIntDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CIntMaxDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CIntPtrDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CLLongDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CLongDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CPtrdiffDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CSCharDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CSUSecondsDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CShortDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CSigAtomicDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CSizeDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CTimeDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CUCharDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CUIntDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CUIntMaxDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CUIntPtrDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CULLongDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CULongDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CUSecondsDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CUShortDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CWcharDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim IntPtrDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim WordPtrDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim Int16Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim Int32Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim Int64Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim Int8Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CBlkCntDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CBlkSizeDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CCcDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CClockIdDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CDevDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CFsBlkCntDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CFsFilCntDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CGidDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CIdDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CInoDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CKeyDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CModeDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CNlinkDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim COffDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CPidDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CRLimDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CSpeedDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CSsizeDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CTcflagDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CTimerDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CUidDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim FdDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim CharDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim DoubleDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim FloatDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim IntDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim WordDefined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim Word16Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim Word32Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim Word64Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim Word8Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim (FunPtr a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim (Ptr a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim (StablePtr a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (Complex a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (First a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (Last a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (Max a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (Min a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (Identity a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (Down a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (Dual a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (Product a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (Sum a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
  • Prim a => Prim (Const a b)Defined in primitive-0.9.1.0 · Data.Primitive.Types
datadata ByteArray#
#

A boxed, unlifted datatype representing a region of raw memory in the garbage-collected heap, which is not scanned for pointers during garbage collection.

It is created by freezing a MutableByteArray# with unsafeFreezeByteArray#. Freezing is essentially a no-op, as MutableByteArray# and ByteArray# share the same heap structure under the hood.

The immutable and mutable variants are commonly used for scenarios requiring high-performance data structures, like Text, Primitive Vector, Unboxed Array, and ShortByteString.

Another application of fundamental importance is Integer, which is backed by ByteArray#.

The representation on the heap of a Byte Array is:

+------------+-----------------+-----------------------+
|            |                 |                       |
|   HEADER   | SIZE (in bytes) |       PAYLOAD         |
|            |                 |                       |
+------------+-----------------+-----------------------+

To obtain a pointer to actual payload (e.g., for FFI purposes) use byteArrayContents# or mutableByteArrayContents#.

Alternatively, enabling the UnliftedFFITypes extension allows to mention ByteArray# and MutableByteArray# in FFI type signatures directly.

datadata MutableByteArray# a
#

A mutable ByteAray#. It can be created in three ways:

  • newByteArray#: Create an unpinned array.

  • newPinnedByteArray#: This will create a pinned array,

  • newAlignedPinnedByteArray#: This will create a pinned array, with a custom alignment.

Unpinned arrays can be moved around during garbage collection, so you must not store or pass pointers to these values if there is a chance for the garbage collector to kick in. That said, even unpinned arrays can be passed to unsafe FFI calls, because no garbage collection happens during these unsafe calls (see Guaranteed Call Safety in the GHC Manual). For safe FFI calls, byte arrays must be not only pinned, but also kept alive by means of the keepAlive# function for the duration of a call (that's because garbage collection cannot move a pinned array, but is free to scrap it altogether).