@@ -5,6 +5,7 @@ import Prelude
5
5
import Control.Monad.Aff (Aff ())
6
6
import Control.Monad.Cont.Trans (ContT ())
7
7
import Control.Monad.Except.Trans (ExceptT ())
8
+ import Control.Monad.Free (Free (), liftF )
8
9
import Control.Monad.List.Trans (ListT ())
9
10
import Control.Monad.Maybe.Trans (MaybeT ())
10
11
import Control.Monad.Reader.Trans (ReaderT ())
@@ -15,32 +16,50 @@ import Control.Monad.Writer.Trans (WriterT())
15
16
16
17
import Data.Monoid (Monoid )
17
18
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
19
21
liftAff :: forall a . Aff e a -> m a
20
22
21
- instance monadAffAff :: MonadAff e (Aff e ) where
23
+ instance affableAff :: Affable e (Aff e ) where
22
24
liftAff = id
23
25
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
25
30
liftAff = lift <<< liftAff
26
31
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
28
33
liftAff = lift <<< liftAff
29
34
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
31
36
liftAff = lift <<< liftAff
32
37
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
34
39
liftAff = lift <<< liftAff
35
40
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
37
42
liftAff = lift <<< liftAff
38
43
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
40
45
liftAff = lift <<< liftAff
41
46
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
43
48
liftAff = lift <<< liftAff
44
49
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
46
51
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