Copyright | (c) Hans Hoglund 2012 |
---|---|
License | BSD-style |
Maintainer | hans@hanshoglund.se |
Stability | experimental |
Portability | non-portable (TF,GNTD) |
Safe Haskell | None |
Language | Haskell98 |
Control.Monad.Plus
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:
- module Control.Monad
- msum :: (Foldable t, MonadPlus m) => t (m a) -> m a
- msum' :: (MonadPlus m, Foldable t) => t (m a) -> m a
- mfold :: (MonadPlus m, Foldable t) => t a -> m a
- mfromList :: MonadPlus m => [a] -> m a
- mfromMaybe :: MonadPlus m => Maybe a -> m a
- mreturn :: MonadPlus m => (a -> Maybe b) -> a -> m b
- mpartition :: MonadPlus m => (a -> Bool) -> m a -> (m a, m a)
- mscatter :: MonadPlus m => m [b] -> m b
- mscatter' :: (MonadPlus m, Foldable t) => m (t b) -> m b
- mcatMaybes :: MonadPlus m => m (Maybe a) -> m a
- mlefts :: MonadPlus m => m (Either a b) -> m a
- mrights :: MonadPlus m => m (Either a b) -> m b
- mpartitionEithers :: MonadPlus m => m (Either a b) -> (m a, m b)
- mmapMaybe :: MonadPlus m => (a -> Maybe b) -> m a -> m b
- mconcatMap :: MonadPlus m => (a -> [b]) -> m a -> m b
- mconcatMap' :: (MonadPlus m, Foldable t) => (a -> t b) -> m a -> m b
- newtype Partial a b = Partial {
- getPartial :: a -> Maybe b
- partial :: (a -> Bool) -> a -> Maybe a
- predicate :: (a -> Maybe a) -> a -> Bool
- always :: (a -> b) -> a -> Maybe b
- never :: a -> Maybe c
Basics
module Control.Monad
msum' :: (MonadPlus m, Foldable t) => t (m a) -> m a Source
This generalizes the list-based concat
function.
Constructing
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
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
Wrapper for partial functions with MonadPlus
instance.
Constructors
Partial | |
Fields
|