@@ -5,6 +5,7 @@ import Prelude
55import Control.Monad.Aff (Aff ())
66import Control.Monad.Cont.Trans (ContT ())
77import Control.Monad.Except.Trans (ExceptT ())
8+ import Control.Monad.Free (Free (), liftF )
89import Control.Monad.List.Trans (ListT ())
910import Control.Monad.Maybe.Trans (MaybeT ())
1011import Control.Monad.Reader.Trans (ReaderT ())
@@ -15,32 +16,50 @@ import Control.Monad.Writer.Trans (WriterT())
1516
1617import Data.Monoid (Monoid )
1718
18- class MonadAff e m where
19+ -- | A class for types that can carry an `Aff` value by some means.
20+ class Affable e m where
1921 liftAff :: forall a . Aff e a -> m a
2022
21- instance monadAffAff :: MonadAff e (Aff e ) where
23+ instance affableAff :: Affable e (Aff e ) where
2224 liftAff = id
2325
24- instance monadAffContT :: (Monad m , MonadAff eff m ) => MonadAff eff (ContT r m ) where
26+ instance affableFree :: (Affable eff f ) => Affable eff (Free f ) where
27+ liftAff = liftF <<< liftAff
28+
29+ instance affableContT :: (Monad m , Affable eff m ) => Affable eff (ContT r m ) where
2530 liftAff = lift <<< liftAff
2631
27- instance monadAffExceptT :: (Monad m , MonadAff eff m ) => MonadAff eff (ExceptT e m ) where
32+ instance affableExceptT :: (Monad m , Affable eff m ) => Affable eff (ExceptT e m ) where
2833 liftAff = lift <<< liftAff
2934
30- instance monadAffListT :: (Monad m , MonadAff eff m ) => MonadAff eff (ListT m ) where
35+ instance affableListT :: (Monad m , Affable eff m ) => Affable eff (ListT m ) where
3136 liftAff = lift <<< liftAff
3237
33- instance monadAffMaybe :: (Monad m , MonadAff eff m ) => MonadAff eff (MaybeT m ) where
38+ instance affableMaybe :: (Monad m , Affable eff m ) => Affable eff (MaybeT m ) where
3439 liftAff = lift <<< liftAff
3540
36- instance monadAffReader :: (Monad m , MonadAff eff m ) => MonadAff eff (ReaderT r m ) where
41+ instance affableReader :: (Monad m , Affable eff m ) => Affable eff (ReaderT r m ) where
3742 liftAff = lift <<< liftAff
3843
39- instance monadAffRWS :: (Monad m , Monoid w , MonadAff eff m ) => MonadAff eff (RWST r w s m ) where
44+ instance affableRWS :: (Monad m , Monoid w , Affable eff m ) => Affable eff (RWST r w s m ) where
4045 liftAff = lift <<< liftAff
4146
42- instance monadAffState :: (Monad m , MonadAff eff m ) => MonadAff eff (StateT s m ) where
47+ instance affableState :: (Monad m , Affable eff m ) => Affable eff (StateT s m ) where
4348 liftAff = lift <<< liftAff
4449
45- instance monadAffWriter :: (Monad m , Monoid w , MonadAff eff m ) => MonadAff eff (WriterT w m ) where
50+ instance affableWriter :: (Monad m , Monoid w , Affable eff m ) => Affable eff (WriterT w m ) where
4651 liftAff = lift <<< liftAff
52+
53+ -- | A class for types where the `Affable` instance for a `Monad` is also a monad
54+ -- | morphism.
55+ class (Monad m , Affable e m ) <= MonadAff e m
56+
57+ instance monadAffAff :: MonadAff e (Aff e )
58+ instance monadAffContT :: (Monad m , Affable eff m ) => MonadAff eff (ContT r m )
59+ instance monadAffExceptT :: (Monad m , Affable eff m ) => MonadAff eff (ExceptT e m )
60+ instance monadAffListT :: (Monad m , Affable eff m ) => MonadAff eff (ListT m )
61+ instance monadAffMaybe :: (Monad m , Affable eff m ) => MonadAff eff (MaybeT m )
62+ instance monadAffReader :: (Monad m , Affable eff m ) => MonadAff eff (ReaderT r m )
63+ instance monadAffRWS :: (Monad m , Monoid w , Affable eff m ) => MonadAff eff (RWST r w s m )
64+ instance monadAffState :: (Monad m , Affable eff m ) => MonadAff eff (StateT s m )
65+ instance monadAffWriter :: (Monad m , Monoid w , Affable eff m ) => MonadAff eff (WriterT w m )
0 commit comments