@@ -59,8 +59,12 @@ import Data.Word (Word(..))
5959import GHCJS.Nullable (Nullable(..))
6060#else
6161import Control.Monad.Trans.Reader (ReaderT(..))
62+import Control.Monad.Trans.State.Lazy (StateT(..))
63+import qualified Control.Monad.Trans.State.Strict as Strict
64+ (StateT(..))
6265import Control.Monad.Trans.Class (MonadTrans(..))
6366import Control.Monad.Fix (MonadFix)
67+import Control.Monad.Ref (MonadAtomicRef(..), MonadRef(..))
6468import Control.Concurrent.STM.TVar (TVar)
6569import Data.Int (Int64)
6670import Data.Text (Text)
@@ -120,6 +124,23 @@ instance MonadJSM JSM where
120124instance MonadJSM m => MonadJSM (ReaderT e m) where
121125 liftJSM' = lift . liftJSM'
122126 {-# INLINE liftJSM' #-}
127+
128+instance MonadJSM m => MonadJSM (StateT r m) where
129+ liftJSM' = lift . liftJSM'
130+ {-# INLINE liftJSM' #-}
131+
132+instance MonadJSM m => MonadJSM (Strict.StateT r m) where
133+ liftJSM' = lift . liftJSM'
134+ {-# INLINE liftJSM' #-}
135+
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
141+
142+instance MonadAtomicRef JSM where
143+ atomicModifyRef r = liftIO . atomicModifyRef r
123144#endif
124145
125146-- | The 'liftJSM' is to 'JSM' what 'liftIO' is to 'IO'.