@@ -59,8 +59,12 @@ import Data.Word (Word(..))
59import GHCJS.Nullable (Nullable(..))
59import GHCJS.Nullable (Nullable(..))
61import Control.Monad.Trans.Reader (ReaderT(..))
61import Control.Monad.Trans.Reader (ReaderT(..))
62+import Control.Monad.Trans.State.Lazy (StateT(..))
63+import qualified Control.Monad.Trans.State.Strict as Strict
62import Control.Monad.Trans.Class (MonadTrans(..))
65import Control.Monad.Trans.Class (MonadTrans(..))
63import Control.Monad.Fix (MonadFix)
66import Control.Monad.Fix (MonadFix)
67+import Control.Monad.Ref (MonadAtomicRef(..), MonadRef(..))
64import Control.Concurrent.STM.TVar (TVar)
68import Control.Concurrent.STM.TVar (TVar)
65import Data.Int (Int64)
69import Data.Int (Int64)
66import Data.Text (Text)
70import Data.Text (Text)
@@ -120,6 +124,23 @@ instance MonadJSM JSM where
120instance MonadJSM m => MonadJSM (ReaderT e m) where
124instance MonadJSM m => MonadJSM (ReaderT e m) where
121 liftJSM' = lift . liftJSM'
125 liftJSM' = lift . liftJSM'
122 {-# INLINE liftJSM' #-}
126 {-# INLINE liftJSM' #-}
128+instance MonadJSM m => MonadJSM (StateT r m) where
129+ liftJSM' = lift . liftJSM'
130+ {-# INLINE liftJSM' #-}
132+instance MonadJSM m => MonadJSM (Strict.StateT r m) where
133+ liftJSM' = lift . liftJSM'
134+ {-# INLINE liftJSM' #-}
136+instance MonadRef JSM where
137+ type Ref JSM = Ref IO
138+ newRef = liftIO . newRef
139+ readRef = liftIO . readRef
140+ writeRef r = liftIO . writeRef r
142+instance MonadAtomicRef JSM where
143+ atomicModifyRef r = liftIO . atomicModifyRef r
125-- | The 'liftJSM' is to 'JSM' what 'liftIO' is to 'IO'.
146-- | The 'liftJSM' is to 'JSM' what 'liftIO' is to 'IO'.