dunai-0.1.0.0: Generalised reactive framework supporting classic, arrowized and monadic FRP.

Safe HaskellSafe
LanguageHaskell2010

Control.Monad.Trans.MStreamF

Contents

Synopsis

Attempt at writing a more generic MSF lifting combinator. This is

lifterS :: (Monad m, Monad m1) => ((a1 -> m1 (b1, MStreamF m1 a1 b1)) -> a -> m (b, MStreamF m1 a1 b1)) -> MStreamF m1 a1 b1 -> MStreamF m a b Source #

Another wrapper idea

transS :: (Monad m1, Monad m2) => (a2 -> m1 a1) -> (forall c. a2 -> m1 (b1, c) -> m2 (b2, c)) -> MStreamF m1 a1 b1 -> MStreamF m2 a2 b2 Source #

A more general lifting mechanism that enables recovery.

transG1 :: (Monad m1, Functor m2, Monad m2) => (a2 -> m1 a1) -> (forall c. a2 -> m1 (b1, c) -> m2 (b2, c)) -> MStreamF m1 a1 b1 -> MStreamF m2 a2 b2 Source #

transG :: (Monad m1, Monad m2) => (a2 -> m1 a1) -> (forall c. a2 -> m1 (b1, c) -> m2 (b2, Maybe c)) -> MStreamF m1 a1 b1 -> MStreamF m2 a2 b2 Source #

Alternative Reader wrapping/unwrapping MSF combinators

readerS' :: Monad m => MStreamF m (s, a) b -> MStreamF (ReaderT s m) a b Source #

runReaderS'' :: Monad m => MStreamF (ReaderT s m) a b -> MStreamF m (s, a) b Source #

runStateS''' :: (Functor m, Monad m) => MStreamF (StateT s m) a b -> MStreamF m (s, a) (s, b) Source #

runMaybeS'' :: Monad m => MStreamF (MaybeT m) a b -> MStreamF m a (Maybe b) Source #

runReaderS' :: Monad m => MStreamF (ReaderT s m) a b -> MStreamF m (s, a) b Source #

Wrapping/unwrapping functions

type Wrapper m1 m2 t1 t2 = forall a b. (t1 a -> m2 b) -> a -> m1 (t2 b) Source #

type Unwrapper m1 m2 t1 t2 = forall a b. (a -> m1 (t2 b)) -> t1 a -> m2 b Source #

type Id a = a Source #

type ReaderWrapper s m = Wrapper (ReaderT s m) m ((,) s) Id Source #

type ReaderUnwrapper s m = Unwrapper (ReaderT s m) m ((,) s) Id Source #

wrapReaderT :: ((s, a) -> m b) -> a -> ReaderT s m b Source #

unwrapReaderT :: (a -> ReaderT s m b) -> (s, a) -> m b Source #

Alternative State wrapping/unwrapping MSF combinators

stateS' :: (Functor m, Monad m) => MStreamF m (s, a) (s, b) -> MStreamF (StateT s m) a b Source #

runStateS' :: (Functor m, Monad m) => MStreamF (StateT s m) a b -> MStreamF m (s, a) (s, b) Source #

runStateS'' :: (Functor m, Monad m) => MStreamF (StateT s m) a b -> MStreamF m (s, a) (s, b) Source #

Alternative Writer wrapping/unwrapping MSF combinators

writerS' :: (Monad m, Monoid s) => MStreamF m a (s, b) -> MStreamF (WriterT s m) a b Source #

runWriterS' :: (Monoid s, Functor m, Monad m) => MStreamF (WriterT s m) a b -> MStreamF m a (s, b) Source #

writerS'' :: (Monad m, Monoid w) => MStreamF m a (w, b) -> MStreamF (WriterT w m) a b Source #

runWriterS'' :: (Monoid s, Functor m, Monad m) => MStreamF (WriterT s m) a b -> MStreamF m a (s, b) Source #

Wrapping/unwrapping functions

wrapMSFWriterT :: (Monoid s, Monad m) => (a -> m ((s, b), ct)) -> a -> WriterT s m (b, ct) Source #

unwrapMSFWriterT :: (Monad m, Functor m) => (a -> WriterT s m (b, ct)) -> a -> m ((s, b), ct) Source #

Reader monad

readerS :: Monad m => MStreamF m (s, a) b -> MStreamF (ReaderT s m) a b Source #

runReaderS :: Monad m => MStreamF (ReaderT s m) a b -> MStreamF m (s, a) b Source #

Auxiliary functions related to ReaderT

runReaderS_ :: Monad m => MStreamF (ReaderT s m) a b -> s -> MStreamF m a b Source #

State monad

stateS :: Monad m => MStreamF m (s, a) (s, b) -> MStreamF (StateT s m) a b Source #

runStateS :: Monad m => MStreamF (StateT s m) a b -> MStreamF m (s, a) (s, b) Source #

Auxiliary functions related to StateT

runStateS_ :: Monad m => MStreamF (StateT s m) a b -> s -> MStreamF m a (s, b) Source #

runStateS__ :: Monad m => MStreamF (StateT s m) a b -> s -> MStreamF m a b Source #

Writer monad

writerS :: (Monad m, Monoid s) => MStreamF m a (s, b) -> MStreamF (WriterT s m) a b Source #

runWriterS :: Monad m => MStreamF (WriterT s m) a b -> MStreamF m a (s, b) Source #

RWS (Reader-Writer-State) monad

runRWSS :: (Functor m, Monad m, Monoid w) => MStreamF (RWST r w s m) a b -> MStreamF m (r, s, a) (w, s, b) Source #

Maybe monad

exit :: Monad m => MStreamF (MaybeT m) a b Source #

exitWhen :: Monad m => (a -> Bool) -> MStreamF (MaybeT m) a a Source #

mapMaybeS :: Monad m => MStreamF m a b -> MStreamF m (Maybe a) (Maybe b) Source #

runMaybeS :: Monad m => MStreamF (MaybeT m) a b -> MStreamF m a (Maybe b) Source #

untilMaybe :: Monad m => MStreamF m a b -> MStreamF m b Bool -> MStreamF (MaybeT m) a b Source #

catchMaybe :: Monad m => MStreamF (MaybeT m) a b -> MStreamF m a b -> MStreamF m a b Source #

Exception monad

catchS :: Monad m => MStreamF (ExceptT e m) a b -> (e -> MStreamF m a b) -> MStreamF m a b Source #

exceptS :: Monad m => MStreamF (ExceptT e m) a b -> MStreamF m a (Either e b) Source #

throwOnCond :: Monad m => (a -> Bool) -> e -> MStreamF (ExceptT e m) a a Source #

throwOnCondM :: Monad m => (a -> m Bool) -> e -> MStreamF (ExceptT e m) a a Source #

throwOn :: Monad m => e -> MStreamF (ExceptT e m) Bool () Source #

throwOn' :: Monad m => MStreamF (ExceptT e m) (Bool, e) () Source #

untilE :: Monad m => MStreamF m a b -> MStreamF m b (Maybe e) -> MStreamF (ExceptT e m) a b Source #

throwS :: Monad m => MStreamF (ExceptT e m) e a Source #

inExceptT :: Monad m => MStreamF (ExceptT e m) (ExceptT e m a) a Source #

List monad

widthFirst :: (Functor m, Monad m) => MStreamF (ListT m) a b -> MStreamF m a [b] Source #

sequenceS :: Monad m => [MStreamF m a b] -> MStreamF (ListT m) a b Source #