Portability | non-portable |
---|---|
Maintainer | Roman Leshchinskiy <rl@cse.unsw.edu.au> |
Primitive state-transformer monads
- class Monad m => PrimMonad m where
- data RealWorld
- primitive_ :: PrimMonad m => (State# (PrimState m) -> State# (PrimState m)) -> m ()
- primToPrim :: (PrimMonad m1, PrimMonad m2, PrimState m1 ~ PrimState m2) => m1 a -> m2 a
- primToIO :: (PrimMonad m, PrimState m ~ RealWorld) => m a -> IO a
- primToST :: PrimMonad m => m a -> ST (PrimState m) a
- unsafePrimToPrim :: (PrimMonad m1, PrimMonad m2) => m1 a -> m2 a
- unsafePrimToIO :: PrimMonad m => m a -> IO a
- unsafePrimToST :: PrimMonad m => m a -> ST s a
- unsafeInlinePrim :: PrimMonad m => m a -> a
- unsafeInlineIO :: IO a -> a
- unsafeInlineST :: ST s a -> a
- touch :: PrimMonad m => a -> m ()
Documentation
class Monad m => PrimMonad m whereSource
Class of primitive state-transformer monads
data RealWorld
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#
.
primitive_ :: PrimMonad m => (State# (PrimState m) -> State# (PrimState m)) -> m ()Source
Execute a primitive operation with no result
primToPrim :: (PrimMonad m1, PrimMonad m2, PrimState m1 ~ PrimState m2) => m1 a -> m2 aSource
Convert a PrimMonad
to another monad with the same state token.
unsafePrimToPrim :: (PrimMonad m1, PrimMonad m2) => m1 a -> m2 aSource
Convert a PrimMonad
to another monad with a possibly different state
token. This operation is highly unsafe!
unsafePrimToIO :: PrimMonad m => m a -> IO aSource
unsafePrimToST :: PrimMonad m => m a -> ST s aSource
unsafeInlinePrim :: PrimMonad m => m a -> aSource
unsafeInlineIO :: IO a -> aSource
unsafeInlineST :: ST s a -> aSource