Safe Haskell | None |
---|---|
Language | Haskell2010 |
Classes and concrete implementations for mutable data structures.
For more information on the design of this library, see the README file, also available at http://www.stackage.org/package/mutable-containers.
- data PRef s a
- type IOPRef = PRef (PrimState IO)
- asPRef :: PRef s a -> PRef s a
- data URef s a
- type IOURef = URef (PrimState IO)
- asURef :: URef s a -> URef s a
- data SRef s a
- type IOSRef = SRef (PrimState IO)
- asSRef :: SRef s a -> SRef s a
- data BRef s a
- type IOBRef = BRef (PrimState IO)
- asBRef :: BRef s a -> BRef s a
- data IORef a :: * -> *
- asIORef :: IORef a -> IORef a
- data STRef s a :: * -> * -> *
- asSTRef :: STRef s a -> STRef s a
- data MutVar s a :: * -> * -> *
- asMutVar :: MutVar s a -> MutVar s a
- data Deque v s a
- type UDeque = Deque MVector
- asUDeque :: UDeque s a -> UDeque s a
- type SDeque = Deque MVector
- asSDeque :: SDeque s a -> SDeque s a
- type BDeque = Deque MVector
- asBDeque :: BDeque s a -> BDeque s a
- data DLList s a
- asDLList :: DLList s a -> DLList s a
- class MutableContainer c where
- type MCState c
- class MutableContainer c => MutableRef c where
- type RefElement c
- class MutableRef c => MutableAtomicRef c where
- class MutableContainer c => MutableCollection c where
- type CollElement c
- class MutableCollection c => MutablePushFront c where
- class MutableCollection c => MutablePushBack c where
- class MutableCollection c => MutablePopFront c where
- class MutableCollection c => MutablePopBack c where
- type MutableQueue c = (MutablePopFront c, MutablePushBack c)
- type MutableStack c = (MutablePopFront c, MutablePushFront c)
- type MutableDeque c = (MutableQueue c, MutablePushFront c, MutablePopBack c)
- class Monad m => PrimMonad (m :: * -> *) where
- type family PrimState (m :: * -> *) :: *
- data RealWorld :: *
- class Prim a
- class (Vector Vector a, MVector MVector a) => Unbox a
- class Storable a
Data types
Single-cell mutable references
A primitive ByteArray reference, supporting any monad.
Since 0.2.0
An unboxed vector reference, supporting any monad.
Since 0.2.0
A storable vector reference, supporting any monad.
Since 0.2.0
A boxed vector reference, supporting any monad.
Since 0.2.0
IsSequence seq => MutablePushBack (BRef s seq) Source # | |
IsSequence seq => MutablePopBack (BRef s seq) Source # | |
IsSequence seq => MutablePushFront (BRef s seq) Source # | |
IsSequence seq => MutablePopFront (BRef s seq) Source # | |
Monoid w => MutableCollection (BRef s w) Source # | |
MutableRef (BRef s a) Source # | |
MutableContainer (BRef s a) Source # | |
type CollElement (BRef s w) Source # | |
type RefElement (BRef s a) Source # | |
type MCState (BRef s a) Source # | |
Standard re-exports
A mutable variable in the IO
monad
Eq (IORef a) | Since: 4.1.0.0 |
IsSequence a => MutablePushBack (IORef a) Source # | |
IsSequence a => MutablePopBack (IORef a) Source # | |
IsSequence a => MutablePushFront (IORef a) Source # | |
IsSequence a => MutablePopFront (IORef a) Source # | |
Monoid w => MutableCollection (IORef w) Source # | |
MutableAtomicRef (IORef a) Source # | |
MutableRef (IORef a) Source # | |
MutableContainer (IORef a) Source # | |
type CollElement (IORef w) Source # | |
type RefElement (IORef a) Source # | |
type MCState (IORef a) Source # | |
data STRef s a :: * -> * -> * #
a value of type STRef s a
is a mutable variable in state thread s
,
containing a value of type a
Eq (STRef s a) | Since: 2.1 |
IsSequence a => MutablePushBack (STRef s a) Source # | |
IsSequence a => MutablePopBack (STRef s a) Source # | |
IsSequence a => MutablePushFront (STRef s a) Source # | |
IsSequence a => MutablePopFront (STRef s a) Source # | |
Monoid w => MutableCollection (STRef s w) Source # | |
MutableRef (STRef s a) Source # | |
MutableContainer (STRef s a) Source # | |
type CollElement (STRef s w) Source # | |
type RefElement (STRef s a) Source # | |
type MCState (STRef s a) Source # | |
data MutVar s a :: * -> * -> * #
A MutVar
behaves like a single-element mutable array associated
with a primitive state token.
Eq (MutVar s a) | |
IsSequence a => MutablePushBack (MutVar s a) Source # | |
IsSequence a => MutablePopBack (MutVar s a) Source # | |
IsSequence a => MutablePushFront (MutVar s a) Source # | |
IsSequence a => MutablePopFront (MutVar s a) Source # | |
Monoid w => MutableCollection (MutVar s w) Source # | |
MutableAtomicRef (MutVar s a) Source # | |
MutableRef (MutVar s a) Source # | |
MutableContainer (MutVar s a) Source # | |
type CollElement (MutVar s w) Source # | |
type RefElement (MutVar s a) Source # | |
type MCState (MutVar s a) Source # | |
Collections/queues
A double-ended queue supporting any underlying vector type and any monad.
This implements a circular double-ended queue with exponential growth.
Since 0.2.0
MVector v a => MutablePushBack (Deque v s a) Source # | |
MVector v a => MutablePopBack (Deque v s a) Source # | |
MVector v a => MutablePushFront (Deque v s a) Source # | |
MVector v a => MutablePopFront (Deque v s a) Source # | |
MVector v a => MutableCollection (Deque v s a) Source # | |
MutableContainer (Deque v s a) Source # | |
type CollElement (Deque v s a) Source # | |
type MCState (Deque v s a) Source # | |
A doubly-linked list.
Since 0.3.0
MutablePushBack (DLList s a) Source # | |
MutablePopBack (DLList s a) Source # | |
MutablePushFront (DLList s a) Source # | |
MutablePopFront (DLList s a) Source # | |
MutableCollection (DLList s a) Source # | |
MutableContainer (DLList s a) Source # | |
type CollElement (DLList s a) Source # | |
type MCState (DLList s a) Source # | |
Type classes
class MutableContainer c Source #
The parent typeclass for all mutable containers.
Since 0.2.0
Associated type giving the primitive state token for the given
container, much like PrimState
from primitive.
Since 0.2.0
MutableContainer (IORef a) Source # | |
MutableContainer (STRef s a) Source # | |
MutableContainer (MutVar s a) Source # | |
MutableContainer (BRef s a) Source # | |
MutableContainer (DLList s a) Source # | |
MutableContainer (PRef s a) Source # | |
MutableContainer (SRef s a) Source # | |
MutableContainer (URef s a) Source # | |
MutableContainer (Deque v s a) Source # | |
class MutableContainer c => MutableRef c where Source #
Typeclass for single-cell mutable references.
Since 0.2.0
type RefElement c Source #
Associated type giving the type of the value inside the mutable reference.
Since 0.2.0
newRef :: (PrimMonad m, PrimState m ~ MCState c) => RefElement c -> m c Source #
Create a new mutable reference with the given value.
Since 0.2.0
readRef :: (PrimMonad m, PrimState m ~ MCState c) => c -> m (RefElement c) Source #
Read the current value in the mutable reference.
Since 0.2.0
writeRef :: (PrimMonad m, PrimState m ~ MCState c) => c -> RefElement c -> m () Source #
Write a new value to the mutable reference.
Since 0.2.0
modifyRef :: (PrimMonad m, PrimState m ~ MCState c) => c -> (RefElement c -> RefElement c) -> m () Source #
Modify the value in the mutable reference, without necessarily forcing the result.
Note: some implementations will force the result, in particular
PRef
, SRef
, and URef
.
Since 0.2.0
modifyRef' :: (PrimMonad m, PrimState m ~ MCState c) => c -> (RefElement c -> RefElement c) -> m () Source #
Modify the value in the mutable reference, forcing the result.
Since 0.2.0
MutableRef (IORef a) Source # | |
MutableRef (STRef s a) Source # | |
MutableRef (MutVar s a) Source # | |
MutableRef (BRef s a) Source # | |
Prim a => MutableRef (PRef s a) Source # | |
Storable a => MutableRef (SRef s a) Source # | |
Unbox a => MutableRef (URef s a) Source # | |
class MutableRef c => MutableAtomicRef c where Source #
MutableRef
s that provide for atomic modifications of their contents.
Since 0.2.0
atomicModifyRef :: (PrimMonad m, PrimState m ~ MCState c) => c -> (RefElement c -> (RefElement c, a)) -> m a Source #
Modify the value without necessarily forcing the result.
Since 0.2.0
atomicModifyRef' :: (PrimMonad m, PrimState m ~ MCState c) => c -> (RefElement c -> (RefElement c, a)) -> m a Source #
Modify the value, forcing the result.
Since 0.2.0
MutableAtomicRef (IORef a) Source # | |
MutableAtomicRef (MutVar s a) Source # | |
class MutableContainer c => MutableCollection c where Source #
Containers which contain 0 or more values.
Since 0.2.0
type CollElement c Source #
The type of each value in the collection.
Since 0.2.0
newColl :: (PrimMonad m, PrimState m ~ MCState c) => m c Source #
Create a new, empty collection.
Since 0.2.0
Monoid w => MutableCollection (IORef w) Source # | |
Monoid w => MutableCollection (STRef s w) Source # | |
Monoid w => MutableCollection (MutVar s w) Source # | |
Monoid w => MutableCollection (BRef s w) Source # | |
MutableCollection (DLList s a) Source # | |
MVector v a => MutableCollection (Deque v s a) Source # | |
class MutableCollection c => MutablePushFront c where Source #
Place a value at the front of the collection.
Since 0.2.0
pushFront :: (PrimMonad m, PrimState m ~ MCState c) => c -> CollElement c -> m () Source #
Place a value at the front of the collection.
Since 0.2.0
IsSequence a => MutablePushFront (IORef a) Source # | |
IsSequence a => MutablePushFront (STRef s a) Source # | |
IsSequence a => MutablePushFront (MutVar s a) Source # | |
IsSequence seq => MutablePushFront (BRef s seq) Source # | |
MutablePushFront (DLList s a) Source # | |
MVector v a => MutablePushFront (Deque v s a) Source # | |
class MutableCollection c => MutablePushBack c where Source #
Place a value at the back of the collection.
Since 0.2.0
pushBack :: (PrimMonad m, PrimState m ~ MCState c) => c -> CollElement c -> m () Source #
Place a value at the back of the collection.
Since 0.2.0
IsSequence a => MutablePushBack (IORef a) Source # | |
IsSequence a => MutablePushBack (STRef s a) Source # | |
IsSequence a => MutablePushBack (MutVar s a) Source # | |
IsSequence seq => MutablePushBack (BRef s seq) Source # | |
MutablePushBack (DLList s a) Source # | |
MVector v a => MutablePushBack (Deque v s a) Source # | |
class MutableCollection c => MutablePopFront c where Source #
Take a value from the front of the collection, if available.
Since 0.2.0
popFront :: (PrimMonad m, PrimState m ~ MCState c) => c -> m (Maybe (CollElement c)) Source #
Take a value from the front of the collection, if available.
Since 0.2.0
IsSequence a => MutablePopFront (IORef a) Source # | |
IsSequence a => MutablePopFront (STRef s a) Source # | |
IsSequence a => MutablePopFront (MutVar s a) Source # | |
IsSequence seq => MutablePopFront (BRef s seq) Source # | |
MutablePopFront (DLList s a) Source # | |
MVector v a => MutablePopFront (Deque v s a) Source # | |
class MutableCollection c => MutablePopBack c where Source #
Take a value from the back of the collection, if available.
Since 0.2.0
popBack :: (PrimMonad m, PrimState m ~ MCState c) => c -> m (Maybe (CollElement c)) Source #
Take a value from the back of the collection, if available.
Since 0.2.0
IsSequence a => MutablePopBack (IORef a) Source # | |
IsSequence a => MutablePopBack (STRef s a) Source # | |
IsSequence a => MutablePopBack (MutVar s a) Source # | |
IsSequence seq => MutablePopBack (BRef s seq) Source # | |
MutablePopBack (DLList s a) Source # | |
MVector v a => MutablePopBack (Deque v s a) Source # | |
Constraint kinds
type MutableQueue c = (MutablePopFront c, MutablePushBack c) Source #
Collections which allow pushing and popping at the front (aka FIFOs).
Since 0.2.0
type MutableStack c = (MutablePopFront c, MutablePushFront c) Source #
Collections which allow pushing at the back and popping at the front (aka FILOs).
Since 0.2.0
type MutableDeque c = (MutableQueue c, MutablePushFront c, MutablePopBack c) Source #
Collections which allow pushing and popping at the front and back.
Since 0.2.0
Convenience re-exports
class Monad m => PrimMonad (m :: * -> *) #
Class of monads which can perform primitive state-transformer actions
PrimMonad IO | |
PrimMonad (ST s) | |
PrimMonad m => PrimMonad (MaybeT m) | |
PrimMonad m => PrimMonad (ListT m) | |
(Monoid w, PrimMonad m) => PrimMonad (WriterT w m) | |
(Monoid w, PrimMonad m) => PrimMonad (WriterT w m) | |
PrimMonad m => PrimMonad (StateT s m) | |
PrimMonad m => PrimMonad (StateT s m) | |
PrimMonad m => PrimMonad (IdentityT * m) | |
PrimMonad m => PrimMonad (ExceptT e m) | |
(Error e, PrimMonad m) => PrimMonad (ErrorT e m) | |
PrimMonad m => PrimMonad (ReaderT * r m) | |
(Monoid w, PrimMonad m) => PrimMonad (RWST r w s m) | |
(Monoid w, PrimMonad m) => PrimMonad (RWST r w s m) | |
type family PrimState (m :: * -> *) :: * #
State token type
type PrimState IO | |
type PrimState (ST s) | |
type PrimState (MaybeT m) | |
type PrimState (ListT m) | |
type PrimState (WriterT w m) | |
type PrimState (WriterT w m) | |
type PrimState (StateT s m) | |
type PrimState (StateT s m) | |
type PrimState (IdentityT * m) | |
type PrimState (ExceptT e m) | |
type PrimState (ErrorT e m) | |
type PrimState (ReaderT * r m) | |
type PrimState (RWST r w s m) | |
type PrimState (RWST r w s m) | |
RealWorld
is deeply magical. It is primitive, but it is not
unlifted (hence ptrArg
). We never manipulate values of type
RealWorld
; it's only used in the type system, to parameterise State#
.
Class of types supporting primitive array operations
class (Vector Vector a, MVector MVector a) => Unbox a #
Unbox Bool | |
Unbox Char | |
Unbox Double | |
Unbox Float | |
Unbox Int | |
Unbox Int8 | |
Unbox Int16 | |
Unbox Int32 | |
Unbox Int64 | |
Unbox Word | |
Unbox Word8 | |
Unbox Word16 | |
Unbox Word32 | |
Unbox Word64 | |
Unbox () | |
Unbox a => Unbox (Complex a) | |
(Unbox a, Unbox b) => Unbox (a, b) | |
(Unbox a, Unbox b, Unbox c) => Unbox (a, b, c) | |
(Unbox a, Unbox b, Unbox c, Unbox d) => Unbox (a, b, c, d) | |
(Unbox a, Unbox b, Unbox c, Unbox d, Unbox e) => Unbox (a, b, c, d, e) | |
(Unbox a, Unbox b, Unbox c, Unbox d, Unbox e, Unbox f) => Unbox (a, b, c, d, e, f) | |
The member functions of this class facilitate writing values of primitive types to raw memory (which may have been allocated with the above mentioned routines) and reading values from blocks of raw memory. The class, furthermore, includes support for computing the storage requirements and alignment restrictions of storable types.
Memory addresses are represented as values of type
, for some
Ptr
aa
which is an instance of class Storable
. The type argument to
Ptr
helps provide some valuable type safety in FFI code (you can't
mix pointers of different types without an explicit cast), while
helping the Haskell type system figure out which marshalling method is
needed for a given pointer.
All marshalling between Haskell and a foreign language ultimately
boils down to translating Haskell data structures into the binary
representation of a corresponding data structure of the foreign
language and vice versa. To code this marshalling in Haskell, it is
necessary to manipulate primitive data types stored in unstructured
memory blocks. The class Storable
facilitates this manipulation on
all types for which it is instantiated, which are the standard basic
types of Haskell, the fixed size Int
types (Int8
, Int16
,
Int32
, Int64
), the fixed size Word
types (Word8
, Word16
,
Word32
, Word64
), StablePtr
, all types from Foreign.C.Types,
as well as Ptr
.
sizeOf, alignment, (peek | peekElemOff | peekByteOff), (poke | pokeElemOff | pokeByteOff)
Storable Bool | Since: 2.1 |
Storable Char | Since: 2.1 |
Storable Double | Since: 2.1 |
Storable Float | Since: 2.1 |
Storable Int | Since: 2.1 |
Storable Int8 | Since: 2.1 |
Storable Int16 | Since: 2.1 |
Storable Int32 | Since: 2.1 |
Storable Int64 | Since: 2.1 |
Storable Word | Since: 2.1 |
Storable Word8 | Since: 2.1 |
Storable Word16 | Since: 2.1 |
Storable Word32 | Since: 2.1 |
Storable Word64 | Since: 2.1 |
Storable () | Since: 4.9.0.0 |
Storable Fingerprint | Since: 4.4.0.0 |
(Storable a, Integral a) => Storable (Ratio a) | Since: 4.8.0.0 |
Storable (StablePtr a) | Since: 2.1 |
Storable (Ptr a) | Since: 2.1 |
Storable (FunPtr a) | Since: 2.1 |
Storable a => Storable (Identity a) | |
Storable a => Storable (Const k a b) | |