Skip to content

Commit af13489

Browse files
committed
Add Affable class
1 parent 77cdfb5 commit af13489

File tree

2 files changed

+33
-13
lines changed

2 files changed

+33
-13
lines changed

bower.json

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -22,9 +22,10 @@
2222
"package.json"
2323
],
2424
"dependencies": {
25-
"purescript-console": "^0.1.0",
26-
"purescript-exceptions": "^0.3.0",
27-
"purescript-functions": "^0.1.0",
25+
"purescript-console": "^0.1.0",
26+
"purescript-exceptions": "^0.3.0",
27+
"purescript-free": "^0.9.1",
28+
"purescript-functions": "^0.1.0",
2829
"purescript-transformers": "^0.8.1"
2930
}
3031
}

src/Control/Monad/Aff/Class.purs

Lines changed: 29 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ import Prelude
55
import Control.Monad.Aff (Aff())
66
import Control.Monad.Cont.Trans (ContT())
77
import Control.Monad.Except.Trans (ExceptT())
8+
import Control.Monad.Free (Free(), liftF)
89
import Control.Monad.List.Trans (ListT())
910
import Control.Monad.Maybe.Trans (MaybeT())
1011
import Control.Monad.Reader.Trans (ReaderT())
@@ -15,32 +16,50 @@ import Control.Monad.Writer.Trans (WriterT())
1516

1617
import 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

Comments
 (0)