on master help sign in
Add instances to JSM to make it more like IO
commit60b6914902da2bfb4de6e5412de5407e8d2e601f authorHamish Mackenzie <Hamish.K.Mackenzie@googlemail.com> dateThu 13 Oct 2016, 23:35 (10 years ago) parent4eea6b4
2 files changed+22
jsaddle.cabal+1 src/Language/Javascript/JSaddle/Types.hs+21
jsaddle.cabal+1
@@ -39,6 +39,7 @@ library
3939 filepath >=1.4.0.0 && <1.5,
4040 http-types >=0.8.6 && <0.10,
4141 process >=1.2.3.0 && <1.5,
42+ ref-tf >=0.4.0.1 && <0.5,
4243 stm >=2.4.4 && <2.5,
4344 time >=1.5.0.1 && <1.7,
4445 wai >=3.0.3.0 && <3.3,
src/Language/Javascript/JSaddle/Types.hs+21
@@ -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'.