Safe Haskell | None |
---|---|
Language | Haskell2010 |
Type-level machinery to manipulate constraints on the monad transformer stack.
Out of the box it provides the following dispatch strategies:
tagAttach
to use functions defined using untagged monad classes as if they were defined using tagged ones.tagReplace
to use functions defined using one tag as if they were defined using another one.
import Ether import Control.Monad.State as Mtl data Foo data Bar f :: Mtl.MonadState Int m => m String f = fmap show Mtl.get g :: Ether.MonadState Foo Int m => m String g = tagAttach @Foo f h :: Ether.MonadState Bar Int m => m String h = tagReplace @Foo @Bar g
- type TagAttachT t = TaggedTrans (TAG_ATTACH t) IdentityT
- tagAttach :: forall tag m a. TagAttachT tag m a -> m a
- type TagReplaceT tOld tNew = TaggedTrans (TAG_REPLACE tOld tNew) IdentityT
- tagReplace :: forall tOld tNew m a. TagReplaceT tOld tNew m a -> m a
- data TAG_ATTACH t
- data TAG_REPLACE tOld tNew
The Tag Attach monad transformer
type TagAttachT t = TaggedTrans (TAG_ATTACH t) IdentityT Source #
tagAttach :: forall tag m a. TagAttachT tag m a -> m a Source #
Attach a tag to untagged transformers.
The Tag Replace monad transformer
type TagReplaceT tOld tNew = TaggedTrans (TAG_REPLACE tOld tNew) IdentityT Source #
tagReplace :: forall tOld tNew m a. TagReplaceT tOld tNew m a -> m a Source #
Replace a tag with another tag.
Internal labels
data TAG_ATTACH t Source #
Encode type-level information for tagAttach
.
(MonadExcept k tag e m, (~) ((* -> *) -> * -> *) trans (IdentityT *)) => MonadError e (TaggedTrans * (* -> *) * (TAG_ATTACH k tag) trans m) Source # | |
(MonadReader k tag r m, (~) ((* -> *) -> * -> *) trans (IdentityT *)) => MonadReader r (TaggedTrans * (* -> *) * (TAG_ATTACH k tag) trans m) Source # | |
(MonadState k tag s m, (~) ((* -> *) -> * -> *) trans (IdentityT *)) => MonadState s (TaggedTrans * (* -> *) * (TAG_ATTACH k tag) trans m) Source # | |
(MonadWriter k tag w m, (~) ((* -> *) -> * -> *) trans (IdentityT *)) => MonadWriter w (TaggedTrans * (* -> *) * (TAG_ATTACH k tag) trans m) Source # | |
data TAG_REPLACE tOld tNew Source #
Encode type-level information for tagReplace
.
(MonadReader k1 tNew r m, (~) ((* -> *) -> * -> *) trans (IdentityT *)) => MonadReader k tOld r (TaggedTrans * (* -> *) * (TAG_REPLACE k1 k tOld tNew) trans m) Source # | |
(MonadState k1 tNew s m, (~) ((* -> *) -> * -> *) trans (IdentityT *)) => MonadState k tOld s (TaggedTrans * (* -> *) * (TAG_REPLACE k1 k tOld tNew) trans m) Source # | |
(MonadWriter k1 tNew w m, (~) ((* -> *) -> * -> *) trans (IdentityT *)) => MonadWriter k tOld w (TaggedTrans * (* -> *) * (TAG_REPLACE k1 k tOld tNew) trans m) Source # | |
(MonadExcept k1 tNew e m, (~) ((* -> *) -> * -> *) trans (IdentityT *)) => MonadExcept k tOld e (TaggedTrans * (* -> *) * (TAG_REPLACE k1 k tOld tNew) trans m) Source # | |