SimpleH-1.0: A light, clean and powerful Haskell utility library

Safe HaskellNone

SimpleH.Monad

Contents

Synopsis

Documentation

The basic Monad interface

class Applicative m => Monad m whereSource

Methods

join :: m (m a) -> m aSource

(>>=) :: m a -> (a -> m b) -> m bSource

Instances

Monad [] 
Monad IO 
Monad Maybe 
Monad Tree 
Monad Interleave 
Monad Id 
Monad TimeVal 
Monad ((->) a) 
Monad (Either a) 
Monoid w => Monad ((,) w) 
MonadFix m => Monad (Backwards m) 
Monad m => Monad (ListT m) 
Ord t => Monad (Future t) 
Ord t => Monad (Event t) 
(Traversable g, Monad f, Monad g) => Monad (:.: f g) 
Monad m => Monad (EitherT e m) 
Monad m => Monad (ContT r m) 
(Monoid w, Monad m) => Monad (WriterT w m) 
Monad m => Monad (ReaderT r m) 
Monad m => Monad (StateT s m) 
(Monoid w, Monad m) => Monad (ParserT w c m) 
(Monoid w, Monad m) => Monad (RWST r w s m) 

class Monad m => MonadFix m whereSource

The class of all monads that have a fixpoint

Methods

mfix :: (a -> m a) -> m aSource

Instances

MonadFix [] 
MonadFix IO 
MonadFix Id 
MonadFix ((->) b) 
MonadFix (Either e) 
MonadFix m => MonadFix (ListT m) 
(MonadFix f, Traversable g, Monad g) => MonadFix (:.: f g) 
MonadFix m => MonadFix (EitherT e m) 
(Monoid w, MonadFix m) => MonadFix (WriterT w m) 
MonadFix m => MonadFix (ReaderT r m) 
MonadFix m => MonadFix (StateT s m) 
(Monoid w, MonadFix m) => MonadFix (ParserT w c m) 
(Monoid w, MonadFix m) => MonadFix (RWST r w s m) 

class MonadTrans t whereSource

Methods

lift :: Monad m => m a -> t m aSource

Monad utilities

newtype Kleisli m a b Source

Constructors

Kleisli 

Fields

runKleisli :: a -> m b
 

Instances

Monad m => Split (Kleisli m) 
Monad m => Choice (Kleisli m) 
Monad m => Category (Kleisli m) 
Monad m => Apply (Kleisli m) 
Monad m => Arrow (Kleisli m) 
Isomorphic (a -> m b) (c -> m' d) (Kleisli m a b) (Kleisli m' c d) 

_Kleisli :: Iso (Kleisli m a b) (Kleisli m' c d) (a -> m b) (c -> m' d)Source

(=<<) :: Monad m => (a -> m b) -> m a -> m bSource

(<=<) :: Monad m => (b -> m c) -> (a -> m b) -> a -> m cSource

(>=>) :: Monad m => (a -> m b) -> (b -> m c) -> a -> m cSource

(>>) :: Applicative f => f a -> f b -> f bSource

(<*=) :: Monad m => m a -> (a -> m b) -> m aSource

return :: Unit f => a -> f aSource

foldlM :: (Foldable t, Monad m) => (b -> a -> m a) -> a -> t b -> m aSource

foldrM :: (Foldable t, Monad m) => (b -> a -> m a) -> a -> t b -> m aSource

while :: Monad m => m (Maybe a) -> m ()Source

until :: Monad m => m (Maybe a) -> m aSource

bind2 :: Monad m => (a -> b -> m c) -> m a -> m b -> m cSource

bind3 :: Monad m => (a -> b -> c -> m d) -> m a -> m b -> m c -> m dSource

(>>>=) :: Monad m => (m a, m b) -> (a -> b -> m c) -> m cSource

(>>>>=) :: Monad m => (m a, m b, m c) -> (a -> b -> c -> m d) -> m dSource

Common monads

The RWS Monad

newtype RWST r w s m a Source

Constructors

RWST 

Fields

runRWST :: (r, s) -> m (a, s, w)
 

Instances

(Monoid w, MonadError e m) => MonadError e (RWST r w s m) 
(Monad m, Monoid w) => MonadWriter w (RWST r w s m) 
(Monad m, Monoid w) => MonadReader r (RWST r w s m) 
(Monad m, Monoid w) => MonadState s (RWST r w s m) 
Monoid w => MonadTrans (RWST r w s) 
(Unit f, Monoid w) => Unit (RWST r w s f) 
(Monoid w, Monad m) => Monad (RWST r w s m) 
(Monoid w, Monad m) => Applicative (RWST r w s m) 
Functor f => Functor (RWST r w s f) 
Foldable m => Foldable (RWST Void w Void m) 
Traversable m => Traversable (RWST Void w Void m) 
(Monoid w, MonadCont m) => MonadCont (RWST r w s m) 
(Monoid w, MonadFix m) => MonadFix (RWST r w s m) 
Ring (m (a, s, w)) => Ring (RWST r w s m a) 
Monoid (m (a, s, w)) => Monoid (RWST r w s m a) 
Semigroup (m (a, s, w)) => Semigroup (RWST r w s m a) 

type RWS r w s a = RWST r w s Id aSource

The State Monad

class Monad m => MonadState s m | m -> s whereSource

A simple State Monad

Methods

get :: m sSource

put :: s -> m ()Source

modify :: (s -> s) -> m ()Source

Instances

MonadState s m => MonadState s (ListT m) 
Monad m => MonadState s (StateT s m) 
(Monoid w, MonadState r m) => MonadState r (WriterT w m) 
MonadState s m => MonadState s (ReaderT r m) 
(Monad m, Monoid w) => MonadState s (RWST r w s m) 
MonadState (IO ()) IO 
(Monoid w, Monad m) => MonadState [c] (ParserT w c m) 

type IOLens a = Lens' (IO ()) (IO a)Source

data StateT s m a Source

Instances

MonadError e m => MonadError e (StateT s m) 
MonadWriter w m => MonadWriter w (StateT s m) 
MonadReader r m => MonadReader r (StateT s m) 
Monad m => MonadState s (StateT s m) 
MonadTrans (StateT s) 
Unit m => Unit (StateT s m) 
Monad m => Monad (StateT s m) 
Monad m => Applicative (StateT s m) 
Functor m => Functor (StateT s m) 
MonadCont m => MonadCont (StateT s m) 
MonadFix m => MonadFix (StateT s m) 
Ring (m (a, s, Void)) => Ring (StateT s m a) 
Monoid (m (a, s, Void)) => Monoid (StateT s m a) 
Semigroup (m (a, s, Void)) => Semigroup (StateT s m a) 

type State s a = StateT s Id aSource

_stateT :: (Functor m, Functor n) => Iso (StateT s m a) (StateT t n b) (s -> m (s, a)) (t -> n (t, b))Source

eval :: (Functor f, Functor f') => f (f' (a, b)) -> f (f' b)Source

exec :: (Functor f, Functor f') => f (f' (a, b)) -> f (f' a)Source

_state :: Iso (State s a) (State t b) (s -> (s, a)) (t -> (t, b))Source

(=~) :: MonadState s m => Lens' s s' -> (s' -> s') -> m ()Source

(=-) :: MonadState s m => Lens' s s' -> s' -> m ()Source

gets :: MonadState s m => Lens' s s' -> m s'Source

saving :: MonadState s m => Lens' s s' -> m a -> m aSource

mapAccum :: Traversable t => (a -> s -> (s, b)) -> t a -> s -> (s, t b)Source

mapAccum_ :: Traversable t => (a -> s -> (s, b)) -> t a -> s -> t bSource

mapAccumR :: Traversable t => (a -> s -> (s, b)) -> t a -> s -> (s, t b)Source

mapAccumR_ :: Traversable t => (a -> s -> (s, b)) -> t a -> s -> t bSource

push :: Traversable t => t a -> a -> t aSource

pop :: Traversable t => t a -> a -> t aSource

withPrev :: Traversable t => a -> t a -> t (a, a)Source

withNext :: Traversable t => t a -> a -> t (a, a)Source

The Reader monad

class Monad m => MonadReader r m whereSource

Methods

ask :: m rSource

local :: (r -> r) -> m a -> m aSource

Instances

MonadReader r ((->) r) 
Monad m => MonadReader r (ReaderT r m) 
(Monoid w, MonadReader r m) => MonadReader r (WriterT w m) 
MonadReader r m => MonadReader r (StateT s m) 
(Monad m, Monoid w) => MonadReader r (RWST r w s m) 

data ReaderT r m a Source

A simple Reader monad

Instances

MonadWriter w m => MonadWriter w (ReaderT r m) 
Monad m => MonadReader r (ReaderT r m) 
MonadState s m => MonadState s (ReaderT r m) 
MonadTrans (ReaderT r) 
Unit m => Unit (ReaderT r m) 
Monad m => Monad (ReaderT r m) 
Monad m => Applicative (ReaderT r m) 
Functor m => Functor (ReaderT r m) 
MonadCont m => MonadCont (ReaderT r m) 
MonadFix m => MonadFix (ReaderT r m) 
Ring (m (a, Void, Void)) => Ring (ReaderT r m a) 
Monoid (m (a, Void, Void)) => Monoid (ReaderT r m a) 
Semigroup (m (a, Void, Void)) => Semigroup (ReaderT r m a) 

type Reader r a = ReaderT r Id aSource

_readerT :: (Functor m, Functor m') => Iso (ReaderT r m a) (ReaderT r' m' b) (r -> m a) (r' -> m' b)Source

_reader :: Iso (Reader r a) (Reader r' b) (r -> a) (r' -> b)Source

The Writer monad

class (Monad m, Monoid w) => MonadWriter w m | m -> w whereSource

Methods

tell :: w -> m ()Source

listen :: m a -> m (w, a)Source

censor :: m (a, w -> w) -> m aSource

Instances

MonadWriter w m => MonadWriter w (ListT m) 
Monoid w => MonadWriter w ((,) w) 
(Monoid w, Monad m) => MonadWriter w (WriterT w m) 
MonadWriter w m => MonadWriter w (ReaderT r m) 
MonadWriter w m => MonadWriter w (StateT s m) 
(Monoid w, Monad m) => MonadWriter w (ParserT w c m) 
(Monad m, Monoid w) => MonadWriter w (RWST r w s m) 

data WriterT w m a Source

A simple Writer monad

Instances

(Monoid w, Monad m) => MonadWriter w (WriterT w m) 
(Monoid w, MonadReader r m) => MonadReader r (WriterT w m) 
(Monoid w, MonadState r m) => MonadState r (WriterT w m) 
Monoid w => MonadTrans (WriterT w) 
(Unit m, Monoid w) => Unit (WriterT w m) 
(Monoid w, Monad m) => Monad (WriterT w m) 
(Monoid w, Monad m) => Applicative (WriterT w m) 
Functor m => Functor (WriterT w m) 
Foldable m => Foldable (WriterT w m) 
Traversable m => Traversable (WriterT w m) 
(Monoid w, MonadCont m) => MonadCont (WriterT w m) 
(Monoid w, MonadFix m) => MonadFix (WriterT w m) 
Ring (m (a, Void, w)) => Ring (WriterT w m a) 
Monoid (m (a, Void, w)) => Monoid (WriterT w m a) 
Semigroup (m (a, Void, w)) => Semigroup (WriterT w m a) 

type Writer w a = WriterT w Id aSource

_writerT :: (Functor m, Functor m') => Iso (WriterT w m a) (WriterT w' m' b) (m (w, a)) (m' (w', b))Source

_writer :: Iso (Writer w a) (Writer w' b) (w, a) (w', b)Source

mute :: (MonadWriter w m, Monoid w) => m a -> m aSource

intercept :: (MonadWriter w m, Monoid w) => m a -> m (w, a)Source

The Continuation monad

class Monad m => MonadCont m whereSource

A simple continuation monad implementation

Methods

callCC :: ((a -> m b) -> m a) -> m aSource

Instances

Monad m => MonadCont (ContT r m) 
(Monoid w, MonadCont m) => MonadCont (WriterT w m) 
MonadCont m => MonadCont (ReaderT r m) 
MonadCont m => MonadCont (StateT s m) 
(Monoid w, MonadCont m) => MonadCont (RWST r w s m) 

newtype ContT r m a Source

Constructors

ContT 

Fields

runContT :: (a -> m r) -> m r
 

Instances

MonadTrans (ContT r) 
Unit m => Unit (ContT r m) 
Monad m => Monad (ContT r m) 
Applicative m => Applicative (ContT r m) 
Functor f => Functor (ContT r f) 
Monad m => MonadCont (ContT r m) 
Ring (m r) => Ring (ContT r m a) 
Monoid (m r) => Monoid (ContT r m a) 
Semigroup (m r) => Semigroup (ContT r m a) 

type Cont r a = ContT r Id aSource

evalContT :: Unit m => ContT r m r -> m rSource

evalCont :: Cont r r -> rSource

The List monad

class Monad m => MonadList m whereSource

Methods

fork :: [a] -> m aSource

Instances

_listT :: Iso (ListT m a) (ListT m' a') (m [a]) (m' [a'])Source

The Error Monad

class Monad m => MonadError e m whereSource

Methods

throw :: e -> m aSource

catch :: (e -> m a) -> m a -> m aSource

Instances

try :: MonadError Void m => m a -> m a -> m aSource

data EitherT e m a Source

Instances

_eitherT :: Functor m => Iso (EitherT e m a) (EitherT f m b) (m (e :+: a)) (m (f :+: b))Source