monadplus-1.3: Haskell98 partial maps and filters over MonadPlus.

Portabilitynon-portable (TF,GNTD)
Stabilityexperimental
Maintainerhans@hanshoglund.se
Safe HaskellSafe-Inferred

Control.Monad.Plus

Contents

Description

Partial maps and filters over MonadPlus instances.

This is especially useful for sequential structures such as event lists, tracks etc.

Inspired by the Conal Elliott's blog post:

Synopsis

Basics

msum :: MonadPlus m => [m a] -> m a

This generalizes the list-based concat function.

msum' :: (MonadPlus m, Foldable t) => t (m a) -> m aSource

This generalizes the list-based concat function.

Constructing

mfold :: (MonadPlus m, Foldable t) => t a -> m aSource

Fold a value into an arbitrary MonadPlus type.

This function generalizes the toList function.

mfromList :: MonadPlus m => [a] -> m aSource

Translate a list to an arbitrary MonadPlus type.

This function generalizes the listToMaybe function.

mfromMaybe :: MonadPlus m => Maybe a -> m aSource

Translate maybe to an arbitrary MonadPlus type.

This function generalizes the maybeToList function.

Filtering

mfilter' :: MonadPlus m => (a -> Bool) -> m a -> m aSource

mfilter', applied to a predicate and a container, returns the container of those elements that satisfy the predicate; i.e.,

 filter p xs = [ x | x <- xs, p x]

This function generalizes the filter function. (Identical to mfilter, it is just here for documentation purposes).

mpartition :: MonadPlus m => (a -> Bool) -> m a -> (m a, m a)Source

The partition function takes a predicate a list and returns the pair of lists of elements which do and do not satisfy the predicate, respectively; i.e.,

 partition p xs == (filter p xs, filter (not . p) xs)

This function generalizes the partition function.

Special filters

mscatter :: MonadPlus m => m [b] -> m bSource

Pass through Just occurrences.

This function generalizes the catMaybes function.

mscatter' :: (MonadPlus m, Foldable t) => m (t b) -> m bSource

Pass through Just occurrences.

This function generalizes the catMaybes function.

mcatMaybes :: MonadPlus m => m (Maybe a) -> m aSource

Pass through Just occurrences.

This function generalizes the catMaybes function.

mlefts :: MonadPlus m => m (Either a b) -> m aSource

Pass through Left occurrences.

This function generalizes the lefts function.

mrights :: MonadPlus m => m (Either a b) -> m bSource

Pass through Right occurrences.

This function generalizes the rights function.

mpartitionEithers :: MonadPlus m => m (Either a b) -> (m a, m b)Source

Separate Left and Right occurances.

This function generalizes the partitionEithers function.

Special maps

mmapMaybe :: MonadPlus m => (a -> Maybe b) -> m a -> m bSource

Modify or discard a value.

This function generalizes the mapMaybe function.

mconcatMap :: MonadPlus m => (a -> [b]) -> m a -> m bSource

Modify and return a number of values.

This function generalizes the concatMap function.