| Copyright | (c) Roman Leshchinskiy 2009 |
|---|---|
| License | BSD-style |
| Maintainer | Roman Leshchinskiy <rl@cse.unsw.edu.au> |
| Portability | non-portable |
| Safe Haskell | None |
| Language | Haskell2010 |
Control.Monad.Primitive
Description
Primitive state-transformer monads
- class Monad m => PrimMonad m where
- type PrimState m
- data RealWorld :: *
- primitive_ :: PrimMonad m => (State# (PrimState m) -> State# (PrimState m)) -> m ()
- class PrimMonad m => PrimBase m where
- liftPrim :: (PrimBase m1, PrimMonad m2, PrimState m1 ~ PrimState m2) => m1 a -> m2 a
- primToPrim :: (PrimBase m1, PrimMonad m2, PrimState m1 ~ PrimState m2) => m1 a -> m2 a
- primToIO :: (PrimBase m, PrimState m ~ RealWorld) => m a -> IO a
- primToST :: PrimBase m => m a -> ST (PrimState m) a
- ioToPrim :: (PrimMonad m, PrimState m ~ RealWorld) => IO a -> m a
- stToPrim :: PrimMonad m => ST (PrimState m) a -> m a
- unsafePrimToPrim :: (PrimBase m1, PrimMonad m2) => m1 a -> m2 a
- unsafePrimToIO :: PrimBase m => m a -> IO a
- unsafePrimToST :: PrimBase m => m a -> ST s a
- unsafeIOToPrim :: PrimMonad m => IO a -> m a
- unsafeSTToPrim :: PrimMonad m => ST s a -> m a
- unsafeInlinePrim :: PrimBase m => m a -> a
- unsafeInlineIO :: IO a -> a
- unsafeInlineST :: ST s a -> a
- touch :: PrimMonad m => a -> m ()
- evalPrim :: forall a m. PrimMonad m => a -> m a
Documentation
class Monad m => PrimMonad m where #
Class of monads which can perform primitive state-transformer actions
Minimal complete definition
Methods
primitive :: (State# (PrimState m) -> (#State# (PrimState m), a#)) -> m a #
Execute a primitive operation
Instances
| 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) # | |
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 () #
Execute a primitive operation with no result
class PrimMonad m => PrimBase m where #
Class of primitive monads for state-transformer actions.
Unlike PrimMonad, this typeclass requires that the Monad be fully
expressed as a state transformer, therefore disallowing other monad
transformers on top of the base IO or ST.
Minimal complete definition
primToPrim :: (PrimBase m1, PrimMonad m2, PrimState m1 ~ PrimState m2) => m1 a -> m2 a #
Convert a PrimBase to another monad with the same state token.
unsafePrimToPrim :: (PrimBase m1, PrimMonad m2) => m1 a -> m2 a #
Convert a PrimBase to another monad with a possibly different state
token. This operation is highly unsafe!
unsafePrimToIO :: PrimBase m => m a -> IO a #
unsafePrimToST :: PrimBase m => m a -> ST s a #
unsafeIOToPrim :: PrimMonad m => IO a -> m a #
unsafeSTToPrim :: PrimMonad m => ST s a -> m a #
unsafeInlinePrim :: PrimBase m => m a -> a #
unsafeInlineIO :: IO a -> a #
unsafeInlineST :: ST s a -> a #