| 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.
Synopsis
- class Monad m => PrimMonad m where
 - data RealWorld
 - primitive_ :: PrimMonad m => (State# (PrimState m) -> State# (PrimState m)) -> m ()
 - class PrimMonad m => PrimBase m where
 - class (PrimMonad m, s ~ PrimState m) => MonadPrim s m
 - class (PrimBase m, MonadPrim s m) => MonadPrimBase s m
 - 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
 - unsafeInterleave :: PrimBase m => m a -> m a
 - unsafeDupableInterleave :: PrimBase m => m a -> m a
 - noDuplicate :: PrimMonad m => m ()
 
Documentation
class Monad m => PrimMonad m where Source #
Class of monads which can perform primitive state-transformer actions.
Methods
primitive :: (State# (PrimState m) -> (# State# (PrimState m), a #)) -> m a Source #
Execute a primitive operation.
Instances
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.
class PrimMonad m => PrimBase m where Source #
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.
Since: 0.6.0.0
Methods
internal :: m a -> State# (PrimState m) -> (# State# (PrimState m), a #) Source #
Expose the internal structure of the monad.
class (PrimMonad m, s ~ PrimState m) => MonadPrim s m Source #
class (PrimBase m, MonadPrim s m) => MonadPrimBase s m Source #
PrimBase's state token type can be annoying to handle
   in constraints. This typeclass lets users (visually) notice
   PrimState equality constraints less, by witnessing that
   s ~ .PrimState m
Instances
| (PrimBase m, MonadPrim s m) => MonadPrimBase s m Source # | |
Defined in Control.Monad.Primitive  | |
primToPrim :: (PrimBase m1, PrimMonad m2, PrimState m1 ~ PrimState m2) => m1 a -> m2 a Source #
Convert a PrimBase to another monad with the same state token.
unsafePrimToPrim :: (PrimBase m1, PrimMonad m2) => m1 a -> m2 a Source #
Convert a PrimBase to another monad with a possibly different state
 token. This operation is highly unsafe!
unsafePrimToIO :: PrimBase m => m a -> IO a Source #
unsafePrimToST :: PrimBase m => m a -> ST s a Source #
unsafeIOToPrim :: PrimMonad m => IO a -> m a Source #
unsafeSTToPrim :: PrimMonad m => ST s a -> m a Source #
unsafeInlinePrim :: PrimBase m => m a -> a Source #
See unsafeInlineIO. This function is not recommended for the same
 reasons.
unsafeInlineIO :: IO a -> a Source #
Generally, do not use this function. It is the same as
 accursedUnutterablePerformIO from bytestring and is well behaved under
 narrow conditions. See the documentation of that function to get an idea
 of when this is sound. In most cases GHC.IO.Unsafe.unsafeDupablePerformIO
 should be preferred.
unsafeInlineST :: ST s a -> a Source #
See unsafeInlineIO. This function is not recommended for the same
 reasons. Prefer runST when s is free.
evalPrim :: forall a m. PrimMonad m => a -> m a Source #
Create an action to force a value; generalizes evaluate
Since: 0.6.2.0
unsafeInterleave :: PrimBase m => m a -> m a Source #
unsafeDupableInterleave :: PrimBase m => m a -> m a Source #
noDuplicate :: PrimMonad m => m () Source #