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

Copyright(c) Hans Hoglund 2012
LicenseBSD-style
Maintainerhans@hanshoglund.se
Stabilityexperimental
Portabilitynon-portable (TF,GNTD)
Safe HaskellNone
LanguageHaskell98

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 :: (Foldable t, MonadPlus m) => t (m a) -> m a

The sum of a collection of actions, generalizing concat. As of base 4.8.0.0, msum is just asum, specialized to MonadPlus.

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

This generalizes the list-based concat function.

Constructing

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

Fold a value into an arbitrary MonadPlus type.

This function generalizes the toList function.

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

Translate a list to an arbitrary MonadPlus type.

This function generalizes the listToMaybe function.

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

Translate maybe to an arbitrary MonadPlus type.

This function generalizes the maybeToList function.

mreturn :: MonadPlus m => (a -> Maybe b) -> a -> m b Source

Convert a partial function to a function returning an arbitrary MonadPlus type.

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 b Source

Join list elements together.

This function generalizes the catMaybes function.

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

Join foldable elements together.

This function generalizes the catMaybes function.

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

Pass through Just elements.

This function generalizes the catMaybes function.

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

Pass through Left elements.

This function generalizes the lefts function.

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

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 b Source

Modify or discard a value.

This function generalizes the mapMaybe function.

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

Modify, discard or spawn values.

This function generalizes the concatMap function.

mconcatMap' :: (MonadPlus m, Foldable t) => (a -> t b) -> m a -> m b Source

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 a Source

Convert a predicate to a partial function.

predicate :: (a -> Maybe a) -> a -> Bool Source

Convert a partial function to a predicate.

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

Convert a total function to a partial function.

never :: a -> Maybe c Source

Make a partial function that always rejects its input.