automaton-1.6: Effectful streams and automata in coalgebraic encoding
Safe HaskellNone
LanguageHaskell2010

Data.Stream.Except

Synopsis

Documentation

data StreamExcept a (m :: Type -> Type) e Source #

A stream that can terminate with an exception.

In automaton, such streams mainly serve as a vehicle to bring control flow to AutomatonExcept (which is based on StreamExcept), and the docs there apply here as well.

StreamExcept is not only a Monad, it also has more efficient Selective, Applicative, and Functor interfaces.

Constructors

RecursiveExcept (Recursive (ExceptT e m) a)

When using >>=, this encoding will be used.

CoalgebraicExcept (OptimizedStreamT (ExceptT e m) a)

This is usually the faster encoding, as it can be optimized by GHC.

Instances

Instances details
MFunctor (StreamExcept a :: (Type -> Type) -> Type -> Type) Source # 
Instance details

Defined in Data.Stream.Except

Methods

hoist :: Monad m => (forall a0. m a0 -> n a0) -> StreamExcept a m b -> StreamExcept a n b #

MonadTrans (StreamExcept a) Source # 
Instance details

Defined in Data.Stream.Except

Methods

lift :: Monad m => m a0 -> StreamExcept a m a0 #

(Functor m, Foldable m) => Foldable (StreamExcept a m) Source #

Run all steps of the stream, discarding all output, until the exception is reached.

Instance details

Defined in Data.Stream.Except

Methods

fold :: Monoid m0 => StreamExcept a m m0 -> m0 #

foldMap :: Monoid m0 => (a0 -> m0) -> StreamExcept a m a0 -> m0 #

foldMap' :: Monoid m0 => (a0 -> m0) -> StreamExcept a m a0 -> m0 #

foldr :: (a0 -> b -> b) -> b -> StreamExcept a m a0 -> b #

foldr' :: (a0 -> b -> b) -> b -> StreamExcept a m a0 -> b #

foldl :: (b -> a0 -> b) -> b -> StreamExcept a m a0 -> b #

foldl' :: (b -> a0 -> b) -> b -> StreamExcept a m a0 -> b #

foldr1 :: (a0 -> a0 -> a0) -> StreamExcept a m a0 -> a0 #

foldl1 :: (a0 -> a0 -> a0) -> StreamExcept a m a0 -> a0 #

toList :: StreamExcept a m a0 -> [a0] #

null :: StreamExcept a m a0 -> Bool #

length :: StreamExcept a m a0 -> Int #

elem :: Eq a0 => a0 -> StreamExcept a m a0 -> Bool #

maximum :: Ord a0 => StreamExcept a m a0 -> a0 #

minimum :: Ord a0 => StreamExcept a m a0 -> a0 #

sum :: Num a0 => StreamExcept a m a0 -> a0 #

product :: Num a0 => StreamExcept a m a0 -> a0 #

Traversable m => Traversable (StreamExcept a m) Source # 
Instance details

Defined in Data.Stream.Except

Methods

traverse :: Applicative f => (a0 -> f b) -> StreamExcept a m a0 -> f (StreamExcept a m b) #

sequenceA :: Applicative f => StreamExcept a m (f a0) -> f (StreamExcept a m a0) #

mapM :: Monad m0 => (a0 -> m0 b) -> StreamExcept a m a0 -> m0 (StreamExcept a m b) #

sequence :: Monad m0 => StreamExcept a m (m0 a0) -> m0 (StreamExcept a m a0) #

Monad m => Applicative (StreamExcept a m) Source # 
Instance details

Defined in Data.Stream.Except

Methods

pure :: a0 -> StreamExcept a m a0 #

(<*>) :: StreamExcept a m (a0 -> b) -> StreamExcept a m a0 -> StreamExcept a m b #

liftA2 :: (a0 -> b -> c) -> StreamExcept a m a0 -> StreamExcept a m b -> StreamExcept a m c #

(*>) :: StreamExcept a m a0 -> StreamExcept a m b -> StreamExcept a m b #

(<*) :: StreamExcept a m a0 -> StreamExcept a m b -> StreamExcept a m a0 #

Functor m => Functor (StreamExcept a m) Source # 
Instance details

Defined in Data.Stream.Except

Methods

fmap :: (a0 -> b) -> StreamExcept a m a0 -> StreamExcept a m b #

(<$) :: a0 -> StreamExcept a m b -> StreamExcept a m a0 #

Monad m => Monad (StreamExcept a m) Source #

return/pure throw exceptions, (>>=) uses the last thrown exception as input for an exception handler.

Instance details

Defined in Data.Stream.Except

Methods

(>>=) :: StreamExcept a m a0 -> (a0 -> StreamExcept a m b) -> StreamExcept a m b #

(>>) :: StreamExcept a m a0 -> StreamExcept a m b -> StreamExcept a m b #

return :: a0 -> StreamExcept a m a0 #

Monad m => Selective (StreamExcept a m) Source # 
Instance details

Defined in Data.Stream.Except

Methods

select :: StreamExcept a m (Either a0 b) -> StreamExcept a m (a0 -> b) -> StreamExcept a m b #

mapOutput :: forall (m :: Type -> Type) a b e. Functor m => (a -> b) -> StreamExcept a m e -> StreamExcept b m e Source #

Apply a function to the output of the stream

toRecursive :: forall (m :: Type -> Type) a e. Functor m => StreamExcept a m e -> Recursive (ExceptT e m) a Source #

runStreamExcept :: forall a (m :: Type -> Type) e. StreamExcept a m e -> OptimizedStreamT (ExceptT e m) a Source #

stepInstant :: Functor m => StreamExcept a m e -> m (Either e (Result (StreamExcept a m e) a)) Source #

safely :: forall (m :: Type -> Type) a. Monad m => StreamExcept a m Void -> OptimizedStreamT m a Source #

safe :: forall (m :: Type -> Type) a void. Monad m => OptimizedStreamT m a -> StreamExcept a m void Source #

forever :: forall (m :: Type -> Type) a e. Monad m => StreamExcept a m e -> OptimizedStreamT m a Source #