haskell / haskell/transformers

Add composition of MonadTransformers

Open
#87 7 comments 1 reaction 0 assignees View on GitHub
Dominant language
Haskell
Stars
5
Forks
10
Avg merge
2h 21m
Merged PRs (30d)
1

Description

[original issue 84 by @Icelandjack]


Add

--      ComposeT :: MonadTransformer -> MonadTransformer -> MonadTransformer

type ComposeT :: (k3 -> k2 -> Type) -> (k1 -> k3) -> (k1 -> k2 -> Type)
newtype ComposeT trans1 trans2 m a = ComposeT (trans1 (trans2 m) a)
deriving newtype (Functor, Applicative, Monad)

instance (MonadTrans trans1, MonadTrans trans2) => MonadTrans (ComposeT trans1 trans2) where
lift :: Monad m => m ~> ComposeT trans1 trans2 m
lift = ComposeT . lift . lift

where MonadTransformer = (Type -> Type) -> (Type -> Type).

Now we can derive MonadTrans for transformers like

type    OkT :: MonadTransformer

newtype OkT m a = OkT (Int -> Int -> m a)
deriving (Functor, Applicative, Monad)
via ReaderT Int (ReaderT Int m)

deriving MonadTrans
via ComposeT (ReaderT Int) (ReaderT Int)

Contributor guide

No contributing guide indexed for this repository

Assessment

This issue has not been assessed yet.

Get new issues in your inbox

A short digest of beginner-friendly GitHub issues.