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

Copyright© 2016–2019 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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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

Defined in Control.Monad.Trans.Identity.Tagged

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 #

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

Defined in Control.Monad.Trans.Identity.Tagged

Methods

get :: TaggedT tag m s #

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

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

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

Defined in Control.Monad.Trans.Identity.Tagged

Methods

ask :: TaggedT tag m r #

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

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

MonadError e m => MonadError e (TaggedT tag m) Source # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

Methods

throwError :: e -> TaggedT tag m a #

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

MonadTrans (TaggedT tag :: (Type -> Type) -> Type -> Type) Source # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

Methods

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

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

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

Methods

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

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

Defined in Control.Monad.Trans.Identity.Tagged

Methods

fail :: String -> TaggedT tag m a #

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

Defined in Control.Monad.Trans.Identity.Tagged

Methods

pure :: a -> TaggedT tag m a #

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

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

(*>) :: 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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

Methods

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

sequenceA :: Applicative f0 => TaggedT tag f (f0 a) -> f0 (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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

Methods

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

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

Defined in Control.Monad.Trans.Identity.Tagged

Methods

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

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

Defined in Control.Monad.Trans.Identity.Tagged

Methods

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

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

liftReadPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec (TaggedT tag f a) #

liftReadListPrec :: ReadPrec a -> ReadPrec [a] -> ReadPrec [TaggedT tag f a] #

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

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

Methods

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

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

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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 # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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.