tagged-identity-0.1.4: Trivial monad transformer that allows identical monad stacks to have different types
Copyright© 2016–present Mark Karpov
LicenseBSD 3 clause
MaintainerMark Karpov <markkarpov92@gmail.com>
Stabilityexperimental
Portabilityportable
Safe HaskellSafe-Inferred
LanguageGHC2021

Control.Monad.Trans.Identity.Tagged

Description

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

Synopsis

The tagged identity monad transformer

newtype TaggedT tag f a Source #

Identity monad transformer with a type-level tag.

Constructors

TaggedT 

Fields

Instances

Instances details
MonadRWS r w s m => MonadRWS r w s (TaggedT tag m) Source # 
Instance details

Defined in Control.Monad.Trans.Identity.Tagged

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 #

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 #

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 #

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 #

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 #

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

Defined in Control.Monad.Trans.Identity.Tagged

Methods

fail :: String -> 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 #

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

Defined in Control.Monad.Trans.Identity.Tagged

Methods

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

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) #

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 #

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 #

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 #

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) #

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] #

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 #

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 #

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 #

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 #

(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 #

(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 #

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.