Moduleprimitive-0.9.1.0
Data.Primitive
- 13 types
- 1 class
- 174 values
- Packageprimitive-0.9.1.0
- Exports188
- LicenceBSD-3-Clause
- SourceByte.hs
Deprecated. use getSizeofMutableByteArray instead
Deprecated. use getSizeofMutablePrimArray instead
Deprecated. use getSizeofSmallMutableArray instead
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:
ByteArray constructor: 1 word
Pointer to ByteArray#: 1 word
ByteArray# Header: 1 word
ByteArray# Size: 1 word
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.ByteEq ByteArrayDefined in base-4.23.0.0 · Data.Array.ByteData ByteArrayDefined in base-4.23.0.0 · Data.Array.ByteOrd ByteArrayDefined in base-4.23.0.0 · Data.Array.ByteNon-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.ByteSemigroup ByteArrayDefined in base-4.23.0.0 · Data.Array.ByteMonoid ByteArrayDefined in base-4.23.0.0 · Data.Array.ByteNFData ByteArrayDefined in deepseq-1.5.2.0 · Control.DeepSeqLift ByteArrayDefined in base-4.23.0.0 · Data.Array.Bytetype Item ByteArray = Word8Defined in base-4.23.0.0 · Data.Array.Byte
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.
Constructors
Instances3Eq, Data, NFData
Eq (MutableByteArray s)Defined in base-4.23.0.0 · Data.Array.ByteTypeable s => Data (MutableByteArray s)Defined in base-4.23.0.0 · Data.Array.ByteNFData (MutableByteArray s)Defined in deepseq-1.5.2.0 · Control.DeepSeq
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.
Instances19NFData1, Generic1, Data, Foldable, Traversable, Storable, …
NFData1 PtrDefined in deepseq-1.5.2.0 · Control.DeepSeqGeneric1 (URec (Ptr ()))Defined in ghc-internal-10.0.0 · GHC.Internal.GenericsEq (Ptr a)Defined in ghc-internal-10.0.0 · GHC.Internal.PtrData a => Data (Ptr a)Defined in ghc-internal-10.0.0 · GHC.Internal.Data.DataOrd (Ptr a)Defined in ghc-internal-10.0.0 · GHC.Internal.PtrShow (Ptr a)Defined in ghc-internal-10.0.0 · GHC.Internal.PtrFoldable UAddrDefined in ghc-internal-10.0.0 · GHC.Internal.GenericsTraversable UAddrDefined in ghc-internal-10.0.0 · GHC.Internal.GenericsStorable (Ptr a)Defined in ghc-internal-10.0.0 · GHC.Internal.Foreign.StorableNFData (Ptr a)Defined in deepseq-1.5.2.0 · Control.DeepSeqPrim (Ptr a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesFunctor (URec (Ptr ()))Defined in ghc-internal-10.0.0 · GHC.Internal.GenericsShow (UAddr p)Defined in ghc-internal-10.0.0 · GHC.Internal.GenericsEq (URec (Ptr ()) p)Defined in ghc-internal-10.0.0 · GHC.Internal.GenericsOrd (URec (Ptr ()) p)Defined in ghc-internal-10.0.0 · GHC.Internal.GenericsGeneric (URec (Ptr ()) p)Defined in ghc-internal-10.0.0 · GHC.Internal.Genericstype Rep (URec (Ptr ()) p) = D1 ('MetaDataDefined in ghc-internal-10.0.0 · GHC.Internal.Generics"URec"
"GHC.Internal.Generics"
"ghc-internal"
'False) (C1 ('MetaCons"UAddr"
'PrefixI 'True) (S1 ('MetaSel ('Just"uAddr#"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) UAddr))type Rep1 (URec (Ptr ())) = D1 ('MetaDataDefined in ghc-internal-10.0.0 · GHC.Internal.Generics"URec"
"GHC.Internal.Generics"
"ghc-internal"
'False) (C1 ('MetaCons"UAddr"
'PrefixI 'True) (S1 ('MetaSel ('Just"uAddr#"
) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) UAddr))data URec (Ptr ())Defined in ghc-internal-10.0.0 · GHC.Internal.GenericsUsed for marking occurrences of Addr#
Instances26Monad, Functor, MonadFix, MonadFail, Applicative, Foldable, …
Monad ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayFunctor ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayMonadFix ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayMonadFail ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayApplicative ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayFoldable ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayTraversable ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayAlternative ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayMonadPlus ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayMonadZip ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayEq1 ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayOrd1 ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayRead1 ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayShow1 ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayNFData1 ArrayDefined in primitive-0.9.1.0 · Data.Primitive.ArrayLift a => Lift (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.ArrayIsList (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.ArrayEq a => Eq (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.ArrayData a => Data (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.ArrayOrd a => Ord (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.ArrayRead a => Read (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.ArrayShow a => Show (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.ArraySemigroup (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.ArrayMonoid (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.ArrayNFData a => NFData (Array a)Defined in primitive-0.9.1.0 · Data.Primitive.Arraytype Item (Array a) = aDefined in primitive-0.9.1.0 · Data.Primitive.Array
Constructors
MutableArraymarray# :: MutableArray# s a
Instances2Eq, Data
Eq (MutableArray s a)Defined in primitive-0.9.1.0 · Data.Primitive.Array(Typeable s, Typeable a) => Data (MutableArray s a)Defined in primitive-0.9.1.0 · Data.Primitive.Array
Constructors
Instances2Eq, NFData
Eq (MutablePrimArray s a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArrayNFData (MutablePrimArray s a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArray
Constructors
Instances9Lift, IsList, Eq, Ord, Show, Semigroup, …
Lift (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArrayPrim 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.PrimArraySemigroup (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArrayMonoid (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArrayNFData (PrimArray a)Defined in primitive-0.9.1.0 · Data.Primitive.PrimArraytype Item (PrimArray a) = aDefined in primitive-0.9.1.0 · Data.Primitive.PrimArray
Constructors
Instances26Monad, Functor, MonadFix, MonadFail, Applicative, Foldable, …
Monad SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayFunctor SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayMonadFix SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayMonadFail SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayApplicative SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayFoldable SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayTraversable SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayAlternative SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayMonadPlus SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayMonadZip SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayEq1 SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayOrd1 SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayRead1 SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayShow1 SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayNFData1 SmallArrayDefined in primitive-0.9.1.0 · Data.Primitive.SmallArrayLift a => Lift (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArrayIsList (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArrayEq a => Eq (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArrayData a => Data (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArrayOrd a => Ord (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArrayRead a => Read (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArrayShow a => Show (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArraySemigroup (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArrayMonoid (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArrayNFData a => NFData (SmallArray a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArraytype Item (SmallArray a) = aDefined in primitive-0.9.1.0 · Data.Primitive.SmallArray
Constructors
Instances2Eq, Data
Eq (SmallMutableArray s a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArray(Typeable s, Typeable a) => Data (SmallMutableArray s a)Defined in primitive-0.9.1.0 · Data.Primitive.SmallArray
Methods
sizeOfType# :: Proxy a -> Int#sizeOf# :: a -> Int#alignmentOfType# :: Proxy a -> Int#alignment# :: a -> Int#indexByteArray# :: ByteArray# -> Int# -> areadByteArray# :: MutableByteArray# s -> Int# -> State# s -> (# State# s, a #)writeByteArray# :: MutableByteArray# s -> Int# -> a -> State# s -> State# ssetByteArray# :: MutableByteArray# s -> Int# -> Int# -> a -> State# s -> State# sindexOffAddr# :: Addr# -> Int# -> areadOffAddr# :: Addr# -> Int# -> State# s -> (# State# s, a #)writeOffAddr# :: Addr# -> Int# -> a -> State# s -> State# ssetOffAddr# :: Addr# -> Int# -> Int# -> a -> State# s -> State# s
Instances77Prim, …
Prim CBoolDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CCharDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CClockDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CDoubleDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CFloatDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CIntDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CIntMaxDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CIntPtrDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CLLongDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CLongDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CPtrdiffDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CSCharDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CSUSecondsDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CShortDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CSigAtomicDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CSizeDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CTimeDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CUCharDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CUIntDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CUIntMaxDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CUIntPtrDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CULLongDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CULongDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CUSecondsDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CUShortDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CWcharDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim IntPtrDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim WordPtrDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim Int16Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim Int32Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim Int64Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim Int8Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CBlkCntDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CBlkSizeDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CCcDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CClockIdDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CDevDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CFsBlkCntDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CFsFilCntDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CGidDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CIdDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CInoDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CKeyDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CModeDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CNlinkDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim COffDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CPidDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CRLimDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CSpeedDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CSsizeDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CTcflagDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CTimerDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CUidDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim FdDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim CharDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim DoubleDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim FloatDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim IntDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim WordDefined in primitive-0.9.1.0 · Data.Primitive.TypesPrim Word16Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim Word32Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim Word64Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim Word8Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim (FunPtr a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim (Ptr a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim (StablePtr a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (Complex a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (First a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (Last a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (Max a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (Min a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (Identity a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (Down a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (Dual a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (Product a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (Sum a)Defined in primitive-0.9.1.0 · Data.Primitive.TypesPrim a => Prim (Const a b)Defined in primitive-0.9.1.0 · Data.Primitive.Types
Constructors
Instances1Storable
Prim a => Storable (PrimStorable a)Defined in primitive-0.9.1.0 · Data.Primitive.Types
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.
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).