@@ -2,8 +2,18 @@ module Halogen.Store.Monad where
22
33import Prelude
44
5+ import Control.Monad.Cont (class MonadCont , ContT )
56import Control.Monad.Error.Class (class MonadError , class MonadThrow )
6- import Control.Monad.Reader (class MonadAsk , ReaderT , ask , lift , mapReaderT , runReaderT )
7+ import Control.Monad.Except (ExceptT )
8+ import Control.Monad.Identity.Trans (IdentityT )
9+ import Control.Monad.Maybe.Trans (MaybeT )
10+ import Control.Monad.RWS (RWST )
11+ import Control.Monad.Reader (class MonadAsk , class MonadReader , ReaderT (..), ask , lift , local , mapReaderT , runReaderT )
12+ import Control.Monad.Rec.Class (class MonadRec )
13+ import Control.Monad.State (class MonadState , StateT )
14+ import Control.Monad.Trans.Class (class MonadTrans )
15+ import Control.Monad.Writer (class MonadTell , class MonadWriter , WriterT )
16+ import Data.Distributive (class Distributive )
717import Data.Foldable (traverse_ )
818import Data.Maybe (Maybe (..))
919import Effect (Effect )
@@ -55,9 +65,19 @@ derive newtype instance MonadEffect m => MonadEffect (StoreT a s m)
5565derive newtype instance MonadAff m => MonadAff (StoreT a s m )
5666derive newtype instance MonadThrow e m => MonadThrow e (StoreT a s m )
5767derive newtype instance MonadError e m => MonadError e (StoreT a s m )
68+ derive newtype instance MonadTell w m => MonadTell w (StoreT a s m )
69+ derive newtype instance MonadWriter w m => MonadWriter w (StoreT a s m )
70+ derive newtype instance MonadState s m => MonadState s (StoreT a s m )
71+ derive newtype instance MonadCont m => MonadCont (StoreT a s m )
72+ derive newtype instance MonadRec m => MonadRec (StoreT a s m )
73+ derive newtype instance Distributive g => Distributive (StoreT a s g )
74+ derive newtype instance MonadTrans (StoreT a s )
5875
59- instance MonadEffect m => MonadAsk s (StoreT a s m ) where
60- ask = getStore
76+ instance MonadAsk r m => MonadAsk r (StoreT a s m ) where
77+ ask = lift ask
78+
79+ instance MonadReader r m => MonadReader r (StoreT a s m ) where
80+ local f (StoreT (ReaderT r)) = StoreT $ ReaderT $ local f <<< r
6181
6282instance MonadEffect m => MonadStore a s (StoreT a s m ) where
6383 getStore = StoreT do
@@ -109,6 +129,46 @@ instance monadStoreHookM :: MonadStore a s m => MonadStore a s (Hooks.HookM m) w
109129 updateStore = lift <<< updateStore
110130 emitSelected = lift <<< emitSelected
111131
132+ instance MonadStore a s m => MonadStore a s (ContT r m ) where
133+ getStore = lift getStore
134+ updateStore = lift <<< updateStore
135+ emitSelected = lift <<< emitSelected
136+
137+ instance MonadStore a s m => MonadStore a s (ExceptT e m ) where
138+ getStore = lift getStore
139+ updateStore = lift <<< updateStore
140+ emitSelected = lift <<< emitSelected
141+
142+ instance MonadStore a s m => MonadStore a s (IdentityT m ) where
143+ getStore = lift getStore
144+ updateStore = lift <<< updateStore
145+ emitSelected = lift <<< emitSelected
146+
147+ instance MonadStore a s m => MonadStore a s (MaybeT m ) where
148+ getStore = lift getStore
149+ updateStore = lift <<< updateStore
150+ emitSelected = lift <<< emitSelected
151+
152+ instance (MonadStore a s m , Monoid w ) => MonadStore a s (RWST r w s m ) where
153+ getStore = lift getStore
154+ updateStore = lift <<< updateStore
155+ emitSelected = lift <<< emitSelected
156+
157+ instance MonadStore a s m => MonadStore a s (ReaderT r m ) where
158+ getStore = lift getStore
159+ updateStore = lift <<< updateStore
160+ emitSelected = lift <<< emitSelected
161+
162+ instance MonadStore a s m => MonadStore a s (StateT s m ) where
163+ getStore = lift getStore
164+ updateStore = lift <<< updateStore
165+ emitSelected = lift <<< emitSelected
166+
167+ instance (MonadStore a s m , Monoid w ) => MonadStore a s (WriterT w m ) where
168+ getStore = lift getStore
169+ updateStore = lift <<< updateStore
170+ emitSelected = lift <<< emitSelected
171+
112172-- | Run a component in the `StoreT` monad.
113173-- |
114174-- | Requires an initial value for the store, `s`, and a reducer that updates
0 commit comments