@@ -9,13 +9,15 @@ module Control.Monad.RWS.Trans
9
9
import Prelude
10
10
11
11
import Control.Alt (class Alt , (<|>))
12
+ import Control.Alternative (class Alternative )
12
13
import Control.Monad.Eff.Class (class MonadEff , liftEff )
13
14
import Control.Monad.Error.Class (class MonadError , throwError , catchError )
14
15
import Control.Monad.Reader.Class (class MonadAsk , class MonadReader )
15
16
import Control.Monad.Rec.Class (class MonadRec , tailRecM , Step (..))
16
17
import Control.Monad.State.Class (class MonadState )
17
18
import Control.Monad.Trans.Class (class MonadTrans , lift )
18
19
import Control.Monad.Writer.Class (class MonadWriter , class MonadTell )
20
+ import Control.Plus (class Plus , empty )
19
21
20
22
import Data.Monoid (class Monoid , mempty )
21
23
import Data.Newtype (class Newtype )
@@ -62,6 +64,8 @@ instance applyRWST :: (Bind m, Monoid w) => Apply (RWST r w s m) where
62
64
instance altRWST :: Alt m => Alt (RWST r w s m ) where
63
65
alt (RWST m) (RWST n) = RWST $ \ r s -> m r s <|> n r s
64
66
67
+ instance alternativeRWST :: (Monoid w , Alternative m , Monad m ) => Alternative (RWST r w s m )
68
+
65
69
instance bindRWST :: (Bind m , Monoid w ) => Bind (RWST r w s m ) where
66
70
bind (RWST m) f = RWST \r s ->
67
71
m r s >>= \(RWSResult s' a w) ->
@@ -119,3 +123,6 @@ instance monadRecRWST :: (MonadRec m, Monoid w) => MonadRec (RWST r w s m) where
119
123
pure case result' of
120
124
Loop x -> Loop (RWSResult state' x (writer <> writer'))
121
125
Done y -> Done (RWSResult state' y (writer <> writer'))
126
+
127
+ instance plusRWST :: Plus m => Plus (RWST r w s m ) where
128
+ empty = RWST \ _ _ -> empty
0 commit comments