list-t-1.0.5.6: ListT done right
Safe Haskell None
Language Haskell2010

ListT

Synopsis

Documentation

newtype ListT m a Source #

A proper implementation of the list monad-transformer. Useful for streaming of monadic data structures.

Since it has instances of MonadPlus and Alternative , you can use general utilities packages like "monadplus" with it.

Constructors

ListT (m ( Maybe (a, ListT m a)))

Instances

Instances details
MMonad ListT Source #
Instance details

Defined in ListT

Methods

embed :: forall (n :: Type -> Type ) m b. Monad n => ( forall a. m a -> ListT n a) -> ListT m b -> ListT n b Source #

MonadTrans ListT Source #
Instance details

Defined in ListT

Methods

lift :: Monad m => m a -> ListT m a Source #

MonadBase b m => MonadBase b ( ListT m) Source #
Instance details

Defined in ListT

Methods

liftBase :: b α -> ListT m α Source #

MonadBaseControl b m => MonadBaseControl b ( ListT m) Source #
Instance details

Defined in ListT

Associated Types

type StM ( ListT m) a Source #

MonadState e m => MonadState e ( ListT m) Source #
Instance details

Defined in ListT

MonadReader e m => MonadReader e ( ListT m) Source #
Instance details

Defined in ListT

MonadError e m => MonadError e ( ListT m) Source #
Instance details

Defined in ListT

Monad m => Monad ( ListT m) Source #
Instance details

Defined in ListT

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

Defined in ListT

Methods

fmap :: (a -> b) -> ListT m a -> ListT m b Source #

(<$) :: a -> ListT m b -> ListT m a Source #

Monad m => MonadFail ( ListT m) Source #
Instance details

Defined in ListT

( Monad m, Functor m) => Applicative ( ListT m) Source #
Instance details

Defined in ListT

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

Defined in ListT

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

Defined in ListT

Methods

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

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

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

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

Eq1 m => Eq1 ( ListT m) Source #
Instance details

Defined in ListT

Methods

liftEq :: (a -> b -> Bool ) -> ListT m a -> ListT m b -> Bool Source #

Ord1 m => Ord1 ( ListT m) Source #
Instance details

Defined in ListT

Show1 m => Show1 ( ListT m) Source #
Instance details

Defined in ListT

MonadZip m => MonadZip ( ListT m) Source #
Instance details

Defined in ListT

Methods

mzip :: ListT m a -> ListT m b -> ListT m (a, b) Source #

mzipWith :: (a -> b -> c) -> ListT m a -> ListT m b -> ListT m c Source #

munzip :: ListT m (a, b) -> ( ListT m a, ListT m b) Source #

MonadIO m => MonadIO ( ListT m) Source #
Instance details

Defined in ListT

( Monad m, Functor m) => Alternative ( ListT m) Source #
Instance details

Defined in ListT

Monad m => MonadPlus ( ListT m) Source #
Instance details

Defined in ListT

Monad m => MonadLogic ( ListT m) Source #
Instance details

Defined in ListT

MFunctor ListT Source #
Instance details

Defined in ListT

Methods

hoist :: forall m n (b :: k). Monad m => ( forall a. m a -> n a) -> ListT m b -> ListT n b Source #

Eq (m ( Maybe (a, ListT m a))) => Eq ( ListT m a) Source #
Instance details

Defined in ListT

( Typeable m, Typeable a, Data (m ( Maybe (a, ListT m a)))) => Data ( ListT m a) Source #
Instance details

Defined in ListT

Methods

gfoldl :: ( forall d b. Data d => c (d -> b) -> d -> c b) -> ( forall g. g -> c g) -> ListT m a -> c ( ListT m a) Source #

gunfold :: ( forall b r. Data b => c (b -> r) -> c r) -> ( forall r. r -> c r) -> Constr -> c ( ListT m a) Source #

toConstr :: ListT m a -> Constr Source #

dataTypeOf :: ListT m a -> DataType Source #

dataCast1 :: Typeable t => ( forall d. Data d => c (t d)) -> Maybe (c ( ListT m a)) Source #

dataCast2 :: Typeable t => ( forall d e. ( Data d, Data e) => c (t d e)) -> Maybe (c ( ListT m a)) Source #

gmapT :: ( forall b. Data b => b -> b) -> ListT m a -> ListT m a Source #

gmapQl :: (r -> r' -> r) -> r -> ( forall d. Data d => d -> r') -> ListT m a -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> ( forall d. Data d => d -> r') -> ListT m a -> r Source #

gmapQ :: ( forall d. Data d => d -> u) -> ListT m a -> [u] Source #

gmapQi :: Int -> ( forall d. Data d => d -> u) -> ListT m a -> u Source #

gmapM :: Monad m0 => ( forall d. Data d => d -> m0 d) -> ListT m a -> m0 ( ListT m a) Source #

gmapMp :: MonadPlus m0 => ( forall d. Data d => d -> m0 d) -> ListT m a -> m0 ( ListT m a) Source #

gmapMo :: MonadPlus m0 => ( forall d. Data d => d -> m0 d) -> ListT m a -> m0 ( ListT m a) Source #

Ord (m ( Maybe (a, ListT m a))) => Ord ( ListT m a) Source #
Instance details

Defined in ListT

Read (m ( Maybe (a, ListT m a))) => Read ( ListT m a) Source #
Instance details

Defined in ListT

Show (m ( Maybe (a, ListT m a))) => Show ( ListT m a) Source #
Instance details

Defined in ListT

Generic ( ListT m a) Source #
Instance details

Defined in ListT

Associated Types

type Rep ( ListT m a) :: Type -> Type Source #

Monad m => Semigroup ( ListT m a) Source #
Instance details

Defined in ListT

Monad m => Monoid ( ListT m a) Source #
Instance details

Defined in ListT

type StM ( ListT m) a Source #
Instance details

Defined in ListT

type StM ( ListT m) a = StM m ( Maybe (a, ListT m a))
type Rep ( ListT m a) Source #
Instance details

Defined in ListT

type Rep ( ListT m a) = D1 (' MetaData "ListT" "ListT" "list-t-1.0.5.6-wkEaNz8lcH7c6HMGWeDwC" ' True ) ( C1 (' MetaCons "ListT" ' PrefixI ' False ) ( S1 (' MetaSel (' Nothing :: Maybe Symbol ) ' NoSourceUnpackedness ' NoSourceStrictness ' DecidedLazy ) ( Rec0 (m ( Maybe (a, ListT m a))))))

Execution utilities

uncons :: ListT m a -> m ( Maybe (a, ListT m a)) Source #

Execute in the inner monad, getting the head and the tail. Returns nothing if it's empty.

head :: Monad m => ListT m a -> m ( Maybe a) Source #

Execute, getting the head. Returns nothing if it's empty.

tail :: Monad m => ListT m a -> m ( Maybe ( ListT m a)) Source #

Execute, getting the tail. Returns nothing if it's empty.

null :: Monad m => ListT m a -> m Bool Source #

Execute, checking whether it's empty.

alternate :: ( Alternative m, Monad m) => ListT m a -> m a Source #

Execute in the inner monad, using its (<|>) function on each entry.

alternateHoisting :: ( Monad n, Alternative n) => ( forall a. m a -> n a) -> ListT m a -> n a Source #

Use a monad morphism to convert a ListT to a similar monad, such as '[]'.

A more efficient alternative to alternate . hoist f .

fold :: Monad m => (b -> a -> m b) -> b -> ListT m a -> m b Source #

Execute, applying a strict left fold.

foldMaybe :: Monad m => (b -> a -> m ( Maybe b)) -> b -> ListT m a -> m b Source #

A version of fold , which allows early termination.

applyFoldM :: Monad m => FoldM m i o -> ListT m i -> m o Source #

Apply the left fold abstraction from the "foldl" package.

toList :: Monad m => ListT m a -> m [a] Source #

Execute, folding to a list.

toReverseList :: Monad m => ListT m a -> m [a] Source #

Execute, folding to a list in the reverse order. Performs more efficiently than toList .

traverse_ :: Monad m => (a -> m ()) -> ListT m a -> m () Source #

Execute, traversing the stream with a side effect in the inner monad.

splitAt :: Monad m => Int -> ListT m a -> m ([a], ListT m a) Source #

Execute, consuming a list of the specified length and returning the remainder stream.

Construction utilities

cons :: Monad m => a -> ListT m a -> ListT m a Source #

Prepend an element.

fromFoldable :: ( Monad m, Foldable f) => f a -> ListT m a Source #

Construct from any foldable.

fromMVar :: MonadIO m => MVar ( Maybe a) -> ListT m a Source #

Construct from an MVar, interpreting the value of Nothing as the end.

unfold :: Monad m => (b -> Maybe (a, b)) -> b -> ListT m a Source #

Construct by unfolding a pure data structure.

unfoldM :: Monad m => (b -> m ( Maybe (a, b))) -> b -> ListT m a Source #

Construct by unfolding a monadic data structure

This is the most memory-efficient way to construct ListT where the length depends on the inner monad.

repeat :: Monad m => a -> ListT m a Source #

Produce an infinite stream.

Transformation utilities

These utilities only accumulate the transformations without actually traversing the stream. They only get applied in a single traversal, which only happens at the execution.

traverse :: Monad m => (a -> m b) -> ListT m a -> ListT m b Source #

A transformation, which traverses the stream with an action in the inner monad.

take :: Monad m => Int -> ListT m a -> ListT m a Source #

A transformation, reproducing the behaviour of Data.List. take .

drop :: Monad m => Int -> ListT m a -> ListT m a Source #

A transformation, reproducing the behaviour of Data.List. drop .

slice :: Monad m => Int -> ListT m a -> ListT m [a] Source #

A transformation, which slices a list into chunks of the specified length.