Skip to content

Commit fcb89f2

Browse files
committed
Merge pull request #46 from purescript/eff
Add MonadEff instances
2 parents aee5b34 + 5c96e6a commit fcb89f2

File tree

9 files changed

+43
-1
lines changed

9 files changed

+43
-1
lines changed

src/Control/Monad/Cont/Trans.purs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module Control.Monad.Cont.Trans where
55
import Prelude
66

77
import Control.Monad.Trans
8+
import Control.Monad.Eff.Class
89

910
-- | The CPS monad transformer.
1011
-- |
@@ -53,3 +54,6 @@ instance monadContT :: (Monad m) => Monad (ContT r m)
5354

5455
instance monadTransContT :: MonadTrans (ContT r) where
5556
lift m = ContT (\k -> m >>= k)
57+
58+
instance monadEffContT :: (Monad m, MonadEff eff m) => MonadEff eff (ContT r m) where
59+
liftEff = lift <<< liftEff

src/Control/Monad/Error/Trans.purs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import Control.Apply
1010
import Control.Monad.Error
1111
import Control.Monad.Rec.Class
1212
import Control.Monad.Trans
13+
import Control.Monad.Eff.Class
1314
import Control.MonadPlus
1415
import Control.Plus
1516
import Data.Either
@@ -75,6 +76,9 @@ instance monadTransErrorT :: MonadTrans (ErrorT e) where
7576
a <- m
7677
return $ Right a
7778

79+
instance monadEffError :: (Monad m, MonadEff eff m) => MonadEff eff (ErrorT e m) where
80+
liftEff = lift <<< liftEff
81+
7882
liftListenError :: forall e m a w. (Monad m) => (m (Either e a) -> m (Tuple (Either e a) w)) -> ErrorT e m a -> ErrorT e m (Tuple a w)
7983
liftListenError listen = mapErrorT $ \m -> do
8084
Tuple a w <- listen m

src/Control/Monad/Except/Trans.purs

Lines changed: 10 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -6,6 +6,8 @@ import Prelude
66
import Control.Alt (Alt)
77
import Control.Alternative (Alternative)
88
import Control.Monad.Rec.Class (MonadRec, tailRecM)
9+
import Control.Monad.Eff.Class (MonadEff, liftEff)
10+
import Control.Monad.Trans
911
import Control.MonadPlus (MonadPlus)
1012
import Control.Plus (Plus)
1113
import Data.Either (Either(..), either)
@@ -76,6 +78,14 @@ instance alternativeExceptT :: (Monoid e, Monad m) => Alternative (ExceptT e m)
7678

7779
instance monadPlusExceptT :: (Monoid e, Monad m) => MonadPlus (ExceptT e m)
7880

81+
instance monadTransExceptT :: MonadTrans (ExceptT e) where
82+
lift m = ExceptT $ do
83+
a <- m
84+
return $ Right a
85+
86+
instance monadEffExceptT :: (Monad m, MonadEff eff m) => MonadEff eff (ExceptT e m) where
87+
liftEff = lift <<< liftEff
88+
7989
-- | Throw an exception in an `ExceptT` computation.
8090
throwE :: forall e m a. (Applicative m) => e -> ExceptT e m a
8191
throwE = ExceptT <<< pure <<< Left

src/Control/Monad/List/Trans.purs

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,8 +33,9 @@ module Control.Monad.List.Trans
3333
import Prelude
3434
import Control.Alt (Alt)
3535
import Control.Alternative (Alternative)
36-
import Control.Monad.Trans (MonadTrans)
36+
import Control.Monad.Trans (MonadTrans, lift)
3737
import Control.MonadPlus (MonadPlus)
38+
import Control.Monad.Eff.Class
3839
import Control.Plus (Plus)
3940
import Data.Lazy (Lazy(), defer, force)
4041
import Data.Maybe (Maybe(..), fromMaybe)
@@ -278,3 +279,6 @@ instance plusListT :: (Monad f) => Plus (ListT f) where
278279
instance alternativeListT :: (Monad f) => Alternative (ListT f)
279280

280281
instance monadPlusListT :: (Monad f) => MonadPlus (ListT f)
282+
283+
instance monadEffListT :: (Monad m, MonadEff eff m) => MonadEff eff (ListT m) where
284+
liftEff = lift <<< liftEff

src/Control/Monad/Maybe/Trans.purs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Control.Alternative
99
import Control.Monad
1010
import Control.Monad.Rec.Class
1111
import Control.Monad.Trans
12+
import Control.Monad.Eff.Class
1213
import Control.MonadPlus
1314
import Control.Plus
1415
import Data.Either
@@ -72,6 +73,9 @@ instance monadRecMaybeT :: (MonadRec m) => MonadRec (MaybeT m) where
7273
Just (Left a1) -> Left a1
7374
Just (Right b) -> Right (Just b)
7475

76+
instance monadEffMaybe :: (Monad m, MonadEff eff m) => MonadEff eff (MaybeT m) where
77+
liftEff = lift <<< liftEff
78+
7579
liftCatchMaybe :: forall m e a. (m (Maybe a) -> (e -> m (Maybe a)) -> m (Maybe a)) -> MaybeT m a -> (e -> MaybeT m a) -> MaybeT m a
7680
liftCatchMaybe catch m h = MaybeT $ catch (runMaybeT m) (runMaybeT <<< h)
7781

src/Control/Monad/RWS/Trans.purs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@ module Control.Monad.RWS.Trans where
55
import Prelude
66

77
import Control.Monad.Trans
8+
import Control.Monad.Eff.Class
89
import Data.Monoid
910
import Data.Tuple
1011

@@ -63,3 +64,6 @@ instance monadRWST :: (Monad m, Monoid w) => Monad (RWST r w s m)
6364

6465
instance monadTransRWST :: (Monoid w) => MonadTrans (RWST r w s) where
6566
lift m = RWST \_ s -> m >>= \a -> return $ mkSee s a mempty
67+
68+
instance monadEffRWS :: (Monad m, Monoid w, MonadEff eff m) => MonadEff eff (RWST r w s m) where
69+
liftEff = lift <<< liftEff

src/Control/Monad/Reader/Trans.purs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import Control.Alternative
99
import Control.Plus
1010
import Control.Monad.Trans
1111
import Control.MonadPlus
12+
import Control.Monad.Eff.Class
1213

1314
-- | The reader monad transformer.
1415
-- |
@@ -59,6 +60,9 @@ instance monadPlusReaderT :: (MonadPlus m) => MonadPlus (ReaderT r m)
5960
instance monadTransReaderT :: MonadTrans (ReaderT r) where
6061
lift = liftReaderT
6162

63+
instance monadEffReader :: (Monad m, MonadEff eff m) => MonadEff eff (ReaderT r m) where
64+
liftEff = lift <<< liftEff
65+
6266
liftReaderT :: forall r m a. m a -> ReaderT r m a
6367
liftReaderT m = ReaderT (const m)
6468

src/Control/Monad/State/Trans.purs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@ import Control.Alt
88
import Control.Alternative
99
import Control.Lazy
1010
import Control.Monad.Rec.Class
11+
import Control.Monad.Eff.Class
1112
import Control.Monad.Trans
1213
import Control.MonadPlus
1314
import Control.Plus
@@ -85,6 +86,9 @@ instance monadTransStateT :: MonadTrans (StateT s) where
8586
instance lazyStateT :: Lazy (StateT s m a) where
8687
defer f = StateT $ \s -> runStateT (f unit) s
8788

89+
instance monadEffState :: (Monad m, MonadEff eff m) => MonadEff eff (StateT s m) where
90+
liftEff = lift <<< liftEff
91+
8892
liftCatchState :: forall s m e a. (m (Tuple a s) -> (e -> m (Tuple a s)) -> m (Tuple a s)) -> StateT s m a -> (e -> StateT s m a) -> StateT s m a
8993
liftCatchState catch m h = StateT $ \s -> catch (runStateT m s) (\e -> runStateT (h e) s)
9094

src/Control/Monad/Writer/Trans.purs

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import Prelude
77
import Control.Alt
88
import Control.Alternative
99
import Control.Monad.Rec.Class
10+
import Control.Monad.Eff.Class
1011
import Control.Monad.Trans
1112
import Control.MonadPlus
1213
import Control.Plus
@@ -77,6 +78,9 @@ instance monadTransWriterT :: (Monoid w) => MonadTrans (WriterT w) where
7778
a <- m
7879
return $ Tuple a mempty
7980

81+
instance monadEffWriter :: (Monad m, Monoid w, MonadEff eff m) => MonadEff eff (WriterT w m) where
82+
liftEff = lift <<< liftEff
83+
8084
liftCatchWriter :: forall w m e a. (m (Tuple a w) -> (e -> m (Tuple a w)) -> m (Tuple a w)) -> WriterT w m a -> (e -> WriterT w m a) -> WriterT w m a
8185
liftCatchWriter catch m h = WriterT $ catch (runWriterT m) (\e -> runWriterT (h e))
8286

0 commit comments

Comments
 (0)