simple-effects-0.10.0.0: A simple effect system that integrates with MTL

Safe HaskellNone
LanguageHaskell2010

Control.Effects.List

Description

Add non-determinism to your monad. Uses the ListT transformer under the hood.

Synopsis

Documentation

choose :: forall a m. MonadEffect NonDeterminism m => [a] -> m a Source #

Get a value from the list. The choice of which value to take is non-deterministic in a sense that the rest of the computation will be ran once for each of them.

deadEnd :: MonadEffect NonDeterminism m => m a Source #

Signals that this branch of execution failed to produce a result.

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

Execute all the effects and collect the result in a list. Note that this forces all the results, no matter which elements of the result list you end up actually using. For lazyer behavior use the other handlers.

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

Given a function, apply it to all the results.

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

Given a folding function, fold over every result. If you want to terminate eary, use the foldWithEarlyTermination instead.

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

Same as foldAllResults but the folding function has the ability to terminate early by returning Nothing.

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

Executes only the effects needed to produce the first n results.

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

Executes only the effects needed to produce a single result.

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

Execute all the effects but discard their results.

module ListT