tagged-identity-0.1.2: Trivial monad transformer that allows identical monad stacks have different types

Copyright© 2016–2017 Mark Karpov
LicenseBSD 3 clause
MaintainerMark Karpov <markkarpov92@gmail.com>
Stabilityexperimental
Portabilityportable
Safe HaskellSafe
LanguageHaskell2010

Control.Monad.Trans.Identity.Tagged

Contents

Description

The module provides a monad transformer that works just like IdentityT, but can be tagged at the type level. This allows to work with monad stacks as usual, but you can make two identical monad stacks have different types. The main application of this is, of course, the ability to have different instances for otherwise the same stacks without having to do opaque newtype wrapping which is not handy with monad stacks.

Synopsis

The tagged identity monad transformer

newtype TaggedT tag f a Source #

Identity monad transformer with a type-level tag.

Constructors

TaggedT 

Fields

Instances

MonadRWS r w s m => MonadRWS r w s (TaggedT tag m) Source # 
MonadError e m => MonadError e (TaggedT tag m) Source # 

Methods

throwError :: e -> TaggedT tag m a #

catchError :: TaggedT tag m a -> (e -> TaggedT tag m a) -> TaggedT tag m a #

MonadReader r m => MonadReader r (TaggedT tag m) Source # 

Methods

ask :: TaggedT tag m r #

local :: (r -> r) -> TaggedT tag m a -> TaggedT tag m a #

reader :: (r -> a) -> TaggedT tag m a #

MonadState s m => MonadState s (TaggedT tag m) Source # 

Methods

get :: TaggedT tag m s #

put :: s -> TaggedT tag m () #

state :: (s -> (a, s)) -> TaggedT tag m a #

MonadWriter w m => MonadWriter w (TaggedT tag m) Source # 

Methods

writer :: (a, w) -> TaggedT tag m a #

tell :: w -> TaggedT tag m () #

listen :: TaggedT tag m a -> TaggedT tag m (a, w) #

pass :: TaggedT tag m (a, w -> w) -> TaggedT tag m a #

MonadTrans (TaggedT tag) Source # 

Methods

lift :: Monad m => m a -> TaggedT tag m a #

Monad m => Monad (TaggedT tag m) Source # 

Methods

(>>=) :: TaggedT tag m a -> (a -> TaggedT tag m b) -> TaggedT tag m b #

(>>) :: TaggedT tag m a -> TaggedT tag m b -> TaggedT tag m b #

return :: a -> TaggedT tag m a #

fail :: String -> TaggedT tag m a #

Functor m => Functor (TaggedT tag m) Source # 

Methods

fmap :: (a -> b) -> TaggedT tag m a -> TaggedT tag m b #

(<$) :: a -> TaggedT tag m b -> TaggedT tag m a #

MonadFix m => MonadFix (TaggedT tag m) Source # 

Methods

mfix :: (a -> TaggedT tag m a) -> TaggedT tag m a #

MonadFail m => MonadFail (TaggedT tag m) Source # 

Methods

fail :: String -> TaggedT tag m a #

Applicative m => Applicative (TaggedT tag m) Source # 

Methods

pure :: a -> TaggedT tag m a #

(<*>) :: TaggedT tag m (a -> b) -> TaggedT tag m a -> TaggedT tag m b #

(*>) :: TaggedT tag m a -> TaggedT tag m b -> TaggedT tag m b #

(<*) :: TaggedT tag m a -> TaggedT tag m b -> TaggedT tag m a #

Foldable f => Foldable (TaggedT tag f) Source # 

Methods

fold :: Monoid m => TaggedT tag f m -> m #

foldMap :: Monoid m => (a -> m) -> TaggedT tag f a -> m #

foldr :: (a -> b -> b) -> b -> TaggedT tag f a -> b #

foldr' :: (a -> b -> b) -> b -> TaggedT tag f a -> b #

foldl :: (b -> a -> b) -> b -> TaggedT tag f a -> b #

foldl' :: (b -> a -> b) -> b -> TaggedT tag f a -> b #

foldr1 :: (a -> a -> a) -> TaggedT tag f a -> a #

foldl1 :: (a -> a -> a) -> TaggedT tag f a -> a #

toList :: TaggedT tag f a -> [a] #

null :: TaggedT tag f a -> Bool #

length :: TaggedT tag f a -> Int #

elem :: Eq a => a -> TaggedT tag f a -> Bool #

maximum :: Ord a => TaggedT tag f a -> a #

minimum :: Ord a => TaggedT tag f a -> a #

sum :: Num a => TaggedT tag f a -> a #

product :: Num a => TaggedT tag f a -> a #

Traversable f => Traversable (TaggedT tag f) Source # 

Methods

traverse :: Applicative f => (a -> f b) -> TaggedT tag f a -> f (TaggedT tag f b) #

sequenceA :: Applicative f => TaggedT tag f (f a) -> f (TaggedT tag f a) #

mapM :: Monad m => (a -> m b) -> TaggedT tag f a -> m (TaggedT tag f b) #

sequence :: Monad m => TaggedT tag f (m a) -> m (TaggedT tag f a) #

Eq1 f => Eq1 (TaggedT tag f) Source # 

Methods

liftEq :: (a -> b -> Bool) -> TaggedT tag f a -> TaggedT tag f b -> Bool #

Ord1 f => Ord1 (TaggedT tag f) Source # 

Methods

liftCompare :: (a -> b -> Ordering) -> TaggedT tag f a -> TaggedT tag f b -> Ordering #

Read1 f => Read1 (TaggedT tag f) Source # 

Methods

liftReadsPrec :: (Int -> ReadS a) -> ReadS [a] -> Int -> ReadS (TaggedT tag f a) #

liftReadList :: (Int -> ReadS a) -> ReadS [a] -> ReadS [TaggedT tag f a] #

Show1 f => Show1 (TaggedT tag f) Source # 

Methods

liftShowsPrec :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> Int -> TaggedT tag f a -> ShowS #

liftShowList :: (Int -> a -> ShowS) -> ([a] -> ShowS) -> [TaggedT tag f a] -> ShowS #

MonadZip m => MonadZip (TaggedT tag m) Source # 

Methods

mzip :: TaggedT tag m a -> TaggedT tag m b -> TaggedT tag m (a, b) #

mzipWith :: (a -> b -> c) -> TaggedT tag m a -> TaggedT tag m b -> TaggedT tag m c #

munzip :: TaggedT tag m (a, b) -> (TaggedT tag m a, TaggedT tag m b) #

MonadIO m => MonadIO (TaggedT tag m) Source # 

Methods

liftIO :: IO a -> TaggedT tag m a #

Alternative m => Alternative (TaggedT tag m) Source # 

Methods

empty :: TaggedT tag m a #

(<|>) :: TaggedT tag m a -> TaggedT tag m a -> TaggedT tag m a #

some :: TaggedT tag m a -> TaggedT tag m [a] #

many :: TaggedT tag m a -> TaggedT tag m [a] #

MonadPlus m => MonadPlus (TaggedT tag m) Source # 

Methods

mzero :: TaggedT tag m a #

mplus :: TaggedT tag m a -> TaggedT tag m a -> TaggedT tag m a #

MonadCont m => MonadCont (TaggedT tag m) Source # 

Methods

callCC :: ((a -> TaggedT tag m b) -> TaggedT tag m a) -> TaggedT tag m a #

(Eq1 f, Eq a) => Eq (TaggedT tag f a) Source # 

Methods

(==) :: TaggedT tag f a -> TaggedT tag f a -> Bool #

(/=) :: TaggedT tag f a -> TaggedT tag f a -> Bool #

(Ord1 f, Ord a) => Ord (TaggedT tag f a) Source # 

Methods

compare :: TaggedT tag f a -> TaggedT tag f a -> Ordering #

(<) :: TaggedT tag f a -> TaggedT tag f a -> Bool #

(<=) :: TaggedT tag f a -> TaggedT tag f a -> Bool #

(>) :: TaggedT tag f a -> TaggedT tag f a -> Bool #

(>=) :: TaggedT tag f a -> TaggedT tag f a -> Bool #

max :: TaggedT tag f a -> TaggedT tag f a -> TaggedT tag f a #

min :: TaggedT tag f a -> TaggedT tag f a -> TaggedT tag f a #

(Read1 f, Read a) => Read (TaggedT tag f a) Source # 

Methods

readsPrec :: Int -> ReadS (TaggedT tag f a) #

readList :: ReadS [TaggedT tag f a] #

readPrec :: ReadPrec (TaggedT tag f a) #

readListPrec :: ReadPrec [TaggedT tag f a] #

(Show1 f, Show a) => Show (TaggedT tag f a) Source # 

Methods

showsPrec :: Int -> TaggedT tag f a -> ShowS #

show :: TaggedT tag f a -> String #

showList :: [TaggedT tag f a] -> ShowS #

mapTaggedT :: (m a -> n b) -> TaggedT tag m a -> TaggedT tag n b Source #

Lift a unary operation to the new monad.

Lifting other operations

liftCallCC :: CallCC m a b -> CallCC (TaggedT tag m) a b Source #

Lift a callCC operation to the new monad.

liftCatch :: Catch e m a -> Catch e (TaggedT tag m) a Source #

Lift a catchE operation to the new monad.