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

Data.Stream.Recursive

Synopsis

Documentation

newtype Recursive (m :: Type -> Type) a Source #

A stream transformer in recursive encoding.

One step of the stream transformer performs a monadic action and results in an output and a new stream.

Constructors

Recursive 

Fields

Instances

Instances details
MFunctor Recursive Source # 
Instance details

Defined in Data.Stream.Recursive

Methods

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

Foldable m => Foldable (Recursive m) Source # 
Instance details

Defined in Data.Stream.Recursive

Methods

fold :: Monoid m0 => Recursive m m0 -> m0 #

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

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

foldr :: (a -> b -> b) -> b -> Recursive m a -> b #

foldr' :: (a -> b -> b) -> b -> Recursive m a -> b #

foldl :: (b -> a -> b) -> b -> Recursive m a -> b #

foldl' :: (b -> a -> b) -> b -> Recursive m a -> b #

foldr1 :: (a -> a -> a) -> Recursive m a -> a #

foldl1 :: (a -> a -> a) -> Recursive m a -> a #

toList :: Recursive m a -> [a] #

null :: Recursive m a -> Bool #

length :: Recursive m a -> Int #

elem :: Eq a => a -> Recursive m a -> Bool #

maximum :: Ord a => Recursive m a -> a #

minimum :: Ord a => Recursive m a -> a #

sum :: Num a => Recursive m a -> a #

product :: Num a => Recursive m a -> a #

Traversable m => Traversable (Recursive m) Source # 
Instance details

Defined in Data.Stream.Recursive

Methods

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

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

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

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

Alternative m => Alternative (Recursive m) Source # 
Instance details

Defined in Data.Stream.Recursive

Methods

empty :: Recursive m a #

(<|>) :: Recursive m a -> Recursive m a -> Recursive m a #

some :: Recursive m a -> Recursive m [a] #

many :: Recursive m a -> Recursive m [a] #

Applicative m => Applicative (Recursive m) Source # 
Instance details

Defined in Data.Stream.Recursive

Methods

pure :: a -> Recursive m a #

(<*>) :: Recursive m (a -> b) -> Recursive m a -> Recursive m b #

liftA2 :: (a -> b -> c) -> Recursive m a -> Recursive m b -> Recursive m c #

(*>) :: Recursive m a -> Recursive m b -> Recursive m b #

(<*) :: Recursive m a -> Recursive m b -> Recursive m a #

Functor m => Functor (Recursive m) Source # 
Instance details

Defined in Data.Stream.Recursive

Methods

fmap :: (a -> b) -> Recursive m a -> Recursive m b #

(<$) :: a -> Recursive m b -> Recursive m a #

hoist' :: Functor f => (forall x. f x -> g x) -> Recursive f a -> Recursive g a Source #

Hoist a stream along a monad morphism, by applying said morphism to the step function.

This is like mmorph's hoist, but it doesn't require a Monad constraint on m2.

constM :: Functor m => m a -> Recursive m a Source #

Constantly perform the same effect, without remembering a state.

mmap :: Monad m => (a -> m b) -> Recursive m a -> Recursive m b Source #

Like fmap or rmap, but the postcomposed function may have an effect in m.