FastPush-0.1.0.2: A monad and monad transformer for pushing things onto a stack very fast.

Safe HaskellNone
LanguageHaskell2010

Control.Monad.Trans.Push

Synopsis

Documentation

data Res a Source #

The internal return type of a push action. The Int value is the new vector used length.

Constructors

Res !Int !a 

Instances

Functor Res Source # 

Methods

fmap :: (a -> b) -> Res a -> Res b #

(<$) :: a -> Res b -> Res a #

newtype PushT v p m a Source #

A monad transformer that lets you push things onto a stack. This is probably super unsafe; see the docs for Control.Monad.ST.Trans.

Constructors

PushT (forall s. Int -> STRef s (v s p) -> STT s m (Res a)) 

Instances

(Monad m, MVector v p) => MonadPush p (PushT v p m) Source # 

Methods

push :: p -> PushT v p m () Source #

Monad m => Monad (PushT v p m) Source # 

Methods

(>>=) :: PushT v p m a -> (a -> PushT v p m b) -> PushT v p m b #

(>>) :: PushT v p m a -> PushT v p m b -> PushT v p m b #

return :: a -> PushT v p m a #

fail :: String -> PushT v p m a #

Functor m => Functor (PushT v p m) Source # 

Methods

fmap :: (a -> b) -> PushT v p m a -> PushT v p m b #

(<$) :: a -> PushT v p m b -> PushT v p m a #

Monad m => Applicative (PushT v p m) Source # 

Methods

pure :: a -> PushT v p m a #

(<*>) :: PushT v p m (a -> b) -> PushT v p m a -> PushT v p m b #

(*>) :: PushT v p m a -> PushT v p m b -> PushT v p m b #

(<*) :: PushT v p m a -> PushT v p m b -> PushT v p m a #

liftST :: Applicative m => ST s a -> STT s m a Source #

This seems *highly* questionable, but appears to get the job done.

runPushT :: (Monad m, Vector v p) => PushT (Mutable v) p m a -> m (a, v p) Source #

Run the monad transformer.

runPushTU :: forall p a m. (Unbox p, Monad m) => PushT MVector p m a -> m (a, Vector p) Source #

Specialized to Unboxed vectors.

runPushTB :: forall p a m. Monad m => PushT MVector p m a -> m (a, Vector p) Source #

Specialized to Storable vectors.

Specialized to standard Boxed vectors.

runPushTS :: forall p a m. (Storable p, Monad m) => PushT MVector p m a -> m (a, Vector p) Source #