primal-0.1.0.0: Primeval world of Haskell.

Copyright(c) Alexey Kuleshevich 2020
LicenseBSD3
MaintainerAlexey Kuleshevich <alexey@kuleshevi.ch>
Stabilityexperimental
Portabilitynon-portable
Safe HaskellNone
LanguageHaskell2010

Control.Prim.Monad

Contents

Description

 
Synopsis

Documentation

type RW = RealWorld Source #

A shorter synonym for the magical RealWorld

data RealWorld :: Type #

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#.

Instances
MonadPrim RealWorld IO Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# RealWorld -> (#State# RealWorld, a#)) -> IO a Source #

MonadUnliftPrim RealWorld IO Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

withRunInPrimBase :: MonadPrimBase RealWorld n => ((forall a. IO a -> n a) -> n b) -> IO b Source #

MonadPrimBase RealWorld IO Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

primBase :: IO a -> State# RealWorld -> (#State# RealWorld, a#) Source #

class MonadThrow m => MonadPrim s m | m -> s where Source #

Methods

prim :: (State# s -> (#State# s, a#)) -> m a Source #

Construct a primitive action

Instances
MonadPrim RealWorld IO Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# RealWorld -> (#State# RealWorld, a#)) -> IO a Source #

MonadPrim s m => MonadPrim s (MaybeT m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> MaybeT m a Source #

MonadPrim s (ST s) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> ST s a Source #

MonadPrim s m => MonadPrim s (SelectT r m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> SelectT r m a Source #

(Monoid w, MonadPrim s m) => MonadPrim s (AccumT w m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> AccumT w m a Source #

(Monoid w, MonadPrim s m) => MonadPrim s (WriterT w m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> WriterT w m a Source #

(Monoid w, MonadPrim s m) => MonadPrim s (WriterT w m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> WriterT w m a Source #

MonadPrim s m => MonadPrim s (StateT st m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> StateT st m a Source #

MonadPrim s m => MonadPrim s (StateT st m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> StateT st m a Source #

MonadPrim s m => MonadPrim s (IdentityT m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> IdentityT m a Source #

MonadPrim s m => MonadPrim s (ExceptT e m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> ExceptT e m a Source #

MonadPrim s m => MonadPrim s (ReaderT r m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> ReaderT r m a Source #

MonadPrim s m => MonadPrim s (ContT r m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> ContT r m a Source #

(Monoid w, MonadPrim s m) => MonadPrim s (RWST r w st m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> RWST r w st m a Source #

(Monoid w, MonadPrim s m) => MonadPrim s (RWST r w st m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

prim :: (State# s -> (#State# s, a#)) -> RWST r w st m a Source #

class MonadUnliftPrim s m => MonadPrimBase s m where Source #

Methods

primBase :: m a -> State# s -> (#State# s, a#) Source #

Unwrap a primitive action

Instances
MonadPrimBase RealWorld IO Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

primBase :: IO a -> State# RealWorld -> (#State# RealWorld, a#) Source #

MonadPrimBase s (ST s) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

primBase :: ST s a -> State# s -> (#State# s, a#) Source #

MonadPrimBase s m => MonadPrimBase s (IdentityT m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

primBase :: IdentityT m a -> State# s -> (#State# s, a#) Source #

class MonadPrim s m => MonadUnliftPrim s m where Source #

Methods

withRunInPrimBase :: MonadPrimBase s n => ((forall a. m a -> n a) -> n b) -> m b Source #

Instances
MonadUnliftPrim RealWorld IO Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

withRunInPrimBase :: MonadPrimBase RealWorld n => ((forall a. IO a -> n a) -> n b) -> IO b Source #

MonadUnliftPrim s (ST s) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

withRunInPrimBase :: MonadPrimBase s n => ((forall a. ST s a -> n a) -> n b) -> ST s b Source #

MonadUnliftPrim s m => MonadUnliftPrim s (IdentityT m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

withRunInPrimBase :: MonadPrimBase s n => ((forall a. IdentityT m a -> n a) -> n b) -> IdentityT m b Source #

MonadUnliftPrim s m => MonadUnliftPrim s (ReaderT r m) Source # 
Instance details

Defined in Control.Prim.Monad.Internal

Methods

withRunInPrimBase :: MonadPrimBase s n => ((forall a. ReaderT r m a -> n a) -> n b) -> ReaderT r m b Source #

prim_ :: MonadPrim s m => (State# s -> State# s) -> m () Source #

Construct a primitive action that does not return anything.

primBase_ :: MonadPrimBase s m => m () -> State# s -> State# s Source #

runInPrimBase :: forall s m a b. MonadUnliftPrim s m => m a -> ((State# s -> (#State# s, a#)) -> State# s -> (#State# s, b#)) -> m b Source #

liftPrimIO :: MonadPrim RW m => IO a -> m a Source #

Lift an IO action to MonadPrim with the RealWorld state token. Type restricted synonym for liftPrimBase

liftPrimST :: MonadPrim s m => ST s a -> m a Source #

Lift an ST action to MonadPrim with the same state token. Type restricted synonym for liftPrimBase

liftPrimBase :: (MonadPrimBase s n, MonadPrim s m) => n a -> m a Source #

Lift an action from the MonadPrimBase to another MonadPrim with the same state token.

primBaseToIO :: MonadPrimBase RealWorld m => m a -> IO a Source #

Restrict a MonadPrimBase action that works with RealWorld to IO.

primBaseToST :: MonadPrimBase s m => m a -> ST s a Source #

Restrict a MonadPrimBase action that works in ST.

touch :: MonadPrim s m => a -> m () Source #

This is an action that ensures that the value is still available and garbage collector has not cleaned it up.

Make sure not to use it after some computation that doesn't return, like after forever for example, otherwise touch will simply be removed by ghc and bad things will happen. If you have a case like that, make sure to use withAlivePrimBase or withAliveUnliftPrim instead.

Since: 0.1.0

seqPrim :: MonadPrim s m => a -> m a Source #

An action that evaluates a value to weak head normal form. Same as evaluate, except it works in a MonadPrim

Since: 0.1.0

withAlivePrimBase Source #

Arguments

:: (MonadPrimBase s n, MonadPrim s m) 
=> a

The value to preserve

-> n b

Action to run in which the value will be preserved

-> m b 

Similar to touch. See withAlive# for more info.

Since: 0.1.0

withAliveUnliftPrim Source #

Arguments

:: MonadUnliftPrim s m 
=> a

The value to preserve

-> m b

Action to run in which the value will be preserved

-> m b 

Similar to touch. See withAlive# for more info.

Since: 0.1.0

showsType :: Typeable t => proxy t -> ShowS Source #

Helper function that converts a type into a string

Re-export