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

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

Control.Monad.Plus

Contents

Description

Partial maps and filters over MonadPlus instances. The basic idea here is that the monad interface together with the monoidal structure of MonadPlus is enough to implement partial maps and filters (i.e. mmapMaybe and mfilter).

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

Inspired by the following 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

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

Join list elements together.

This function generalizes the catMaybes function.

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

Join foldable elements together.

This function generalizes the catMaybes function.

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

Pass through Just elements.

This function generalizes the catMaybes function.

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

Pass through Left elements.

This function generalizes the lefts function.

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

Pass through Right elements.

This function generalizes the rights function.

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

Separate Left and Right elements.

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, discard or spawn values.

This function generalizes the concatMap function.

Utility

newtype Partial a b Source

Wrapper for partial functions with MonadPlus instance.

Constructors

Partial 

Fields

getPartial :: a -> Maybe b
 

partial :: (a -> Bool) -> a -> Maybe aSource

Convert a predicate to a partial function.

predicate :: (a -> Maybe a) -> a -> BoolSource

Convert a partial function to a predicate.

always :: (a -> b) -> a -> Maybe bSource

Convert a total function to a partial function.

never :: a -> Maybe cSource

Make a partial function that always rejects its input.