A monad supporting labeling of values and a monad transformer supporting the consistent labeling of keys.
TODO: Split module into transformer part and type class instance part along the lines of the transformers package.
- class (Applicative m, Monad m) => MonadLabel k l m where
- label :: k -> m l
- newtype ConsistentLabelsT k l m a = ConsistentLabelsT {
- unConsistentLabelsT :: StateT ([l], Map k l) m a
- runConsistentLabelsT :: ConsistentLabelsT k l m a -> [l] -> m (a, ([l], Map k l))
- evalConsistentLabelsT :: Functor m => ConsistentLabelsT k l m a -> [l] -> m a
- execConsistentLabelsT :: Functor m => ConsistentLabelsT k l m a -> [l] -> m ([l], Map k l)
- type ConsistentLabels k l = ConsistentLabelsT k l Identity
- runConsistentLabels :: ConsistentLabels k l a -> [l] -> (a, ([l], Map k l))
- evalConsistentLabels :: ConsistentLabels k l a -> [l] -> a
- execConsistentLabels :: ConsistentLabels k l a -> [l] -> ([l], Map k l)
Documentation
class (Applicative m, Monad m) => MonadLabel k l m whereSource
A monad allowing for labelling keys.
MonadLabel k l m => MonadLabel k l (ReaderT r m) | |
MonadLabel k l m => MonadLabel k l (StateT s m) | |
(Ord k, Applicative m, Monad m) => MonadLabel k l (ConsistentLabelsT k l m) |
newtype ConsistentLabelsT k l m a Source
A monad transformer implementing consistent (equal keys get equal labels) labeling of keys with a sequence of labels.
ConsistentLabelsT | |
|
(Ord k, Applicative m, Monad m) => MonadLabel k l (ConsistentLabelsT k l m) | |
MonadTrans (ConsistentLabelsT k l) | |
Monad m => Monad (ConsistentLabelsT k l m) | |
Functor m => Functor (ConsistentLabelsT k l m) | |
(Monad m, Functor m) => Applicative (ConsistentLabelsT k l m) |
runConsistentLabelsT :: ConsistentLabelsT k l m a -> [l] -> m (a, ([l], Map k l))Source
Run a computation requiring consistent labels.
evalConsistentLabelsT :: Functor m => ConsistentLabelsT k l m a -> [l] -> m aSource
Evaluate a computation requiring consistent labels.
execConsistentLabelsT :: Functor m => ConsistentLabelsT k l m a -> [l] -> m ([l], Map k l)Source
Execute a computation requiring consistent labels.
type ConsistentLabels k l = ConsistentLabelsT k l IdentitySource
runConsistentLabels :: ConsistentLabels k l a -> [l] -> (a, ([l], Map k l))Source
Run a computation requiring consistent labels.
evalConsistentLabels :: ConsistentLabels k l a -> [l] -> aSource
Evaluate a computation requiring consistent labels.
execConsistentLabels :: ConsistentLabels k l a -> [l] -> ([l], Map k l)Source
Execute a computation requiring consistent labels.