HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Moduleprimitive-0.9.1.0Haskell2010

Data.Primitive.Types

Basic types and classes for primitive array operations.

  • 2 types
  • 1 class
  • 6 values
classclass Prim a where
#

Class of types supporting primitive array operations. This includes interfacing with GC-managed memory (functions suffixed with ByteArray#) and interfacing with unmanaged memory (functions suffixed with Addr#). Endianness is platform-dependent.

Methods

  • sizeOfType# :: Proxy a -> Int#

    The size of values of type a in bytes. This has to be used with TypeApplications: sizeOfType @a.

  • sizeOf# :: a -> Int#

    The size of values of type a in bytes. The argument is not used.

    It is recommended to use sizeOfType# instead.

  • alignmentOfType# :: Proxy a -> Int#

    The alignment of values of type a in bytes. This has to be used with TypeApplications: alignmentOfType @a.

  • alignment# :: a -> Int#

    The alignment of values of type a in bytes. The argument is not used.

    It is recommended to use alignmentOfType# instead.

  • indexByteArray# :: ByteArray# -> Int# -> a

    Read a value from the array. The offset is in elements of type a rather than in bytes.

  • readByteArray# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)

    Read a value from the mutable array. The offset is in elements of type a rather than in bytes.

  • writeByteArray# :: MutableByteArray# s -> Int# -> a -> State# s -> State# s

    Write a value to the mutable array. The offset is in elements of type a rather than in bytes.

  • setByteArray# :: MutableByteArray# s -> Int# -> Int# -> a -> State# s -> State# s

    Fill a slice of the mutable array with a value. The offset and length of the chunk are in elements of type a rather than in bytes.

  • indexOffAddr# :: Addr# -> Int# -> a

    Read a value from a memory position given by an address and an offset. The memory block the address refers to must be immutable. The offset is in elements of type a rather than in bytes.

  • readOffAddr# :: Addr# -> Int# -> State# s -> (# State# s, a #)

    Read a value from a memory position given by an address and an offset. The offset is in elements of type a rather than in bytes.

  • writeOffAddr# :: Addr# -> Int# -> a -> State# s -> State# s

    Write a value to a memory position given by an address and an offset. The offset is in elements of type a rather than in bytes.

  • setOffAddr# :: Addr# -> Int# -> Int# -> a -> State# s -> State# s

    Fill a memory block given by an address, an offset and a length. The offset and length are in elements of type a rather than in bytes.

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 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 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 (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
valuesizeOf :: Prim a => a -> Int
#

The size of values of type a in bytes. The argument is not used.

It is recommended to use sizeOfType instead.

This function has existed since 0.1, but was moved from Data.Primitive to Data.Primitive.Types in version 0.6.3.0.

valuesizeOfType :: Prim a => Int
#

The size of values of type a in bytes. This has to be used with TypeApplications: sizeOfType @a.

Example3 expressions
:set -XTypeApplicationsimport Data.Int (Int32)sizeOfType @Int324
valuealignment :: Prim a => a -> Int
#

The alignment of values of type a in bytes. The argument is not used.

It is recommended to use alignmentOfType instead.

This function has existed since 0.1, but was moved from Data.Primitive to Data.Primitive.Types in version 0.6.3.0.

valuealignmentOfType :: Prim a => Int
#

The alignment of values of type a in bytes. This has to be used with TypeApplications: alignmentOfType @a.

An implementation of setByteArray# that calls writeByteArray# to set each element. This is helpful when writing a Prim instance for a multi-word data type for which there is no CPU-accelerated way to broadcast a value to contiguous memory. It is typically used alongside defaultSetOffAddr#. For example:

data Trip = Trip Int Int Int

instance Prim Trip
  sizeOfType# _ = 3# *# sizeOfType# (proxy# :: Proxy# Int)
  alignmentOfType# _ = alignmentOfType# (proxy# :: Proxy# Int)
  indexByteArray# arr# i# = ...
  readByteArray# arr# i# = ...
  writeByteArray# arr# i# (Trip a b c) =
    \s0 -> case writeByteArray# arr# (3# *# i#) a s0 of
       s1 -> case writeByteArray# arr# ((3# *# i#) +# 1#) b s1 of
         s2 -> case writeByteArray# arr# ((3# *# i#) +# 2# ) c s2 of
           s3 -> s3
  setByteArray# = defaultSetByteArray#
  indexOffAddr# addr# i# = ...
  readOffAddr# addr# i# = ...
  writeOffAddr# addr# i# (Trip a b c) =
    \s0 -> case writeOffAddr# addr# (3# *# i#) a s0 of
       s1 -> case writeOffAddr# addr# ((3# *# i#) +# 1#) b s1 of
         s2 -> case writeOffAddr# addr# ((3# *# i#) +# 2# ) c s2 of
           s3 -> s3
  setOffAddr# = defaultSetOffAddr#
newtypenewtype PrimStorable a
#

Newtype that uses a Prim instance to give rise to a Storable instance. This type is intended to be used with the DerivingVia extension available in GHC 8.6 and up. For example, consider a user-defined Prim instance for a multi-word data type.

data Uuid = Uuid Word64 Word64
  deriving Storable via (PrimStorable Uuid)
instance Prim Uuid where ...

Writing the Prim instance is tedious and unavoidable, but the Storable instance comes for free once the Prim instance is written.

Instances1Storable
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

Instances21NFData1, IArray, Generic1, Data, Show, Foldable, …