on master help sign in
Add default for MonadJSM liftJSM'
commit0a2cfc6f37f4b26c330a2cc4a1ef35cffa7fcff8 authorHamish Mackenzie <Hamish.K.Mackenzie@googlemail.com> dateSat 13 May 2017, 00:57 (9 years ago) parent3f48016
1 file changed+30−15
jsaddle/src/Language/Javascript/JSaddle/Types.hs+30−15
jsaddle/src/Language/Javascript/JSaddle/Types.hs+30−15
@@ -14,6 +14,7 @@
1414#endif
1515{-# LANGUAGE ConstraintKinds #-}
1616{-# LANGUAGE KindSignatures #-}
17+{-# LANGUAGE AllowAmbiguousTypes #-}
1718-----------------------------------------------------------------------------
1819--
1920-- Module : Language.Javascript.JSaddle.Types
@@ -88,10 +89,19 @@ import GHCJS.Nullable (Nullable(..))
8889import GHCJS.Prim.Internal (JSVal(..), JSValueRef)
8990import Data.JSString.Internal.Type (JSString(..))
9091import Control.DeepSeq (NFData(..))
92+import Control.Monad.Trans.Cont (ContT(..))
93+import Control.Monad.Trans.Error (Error(..), ErrorT(..))
94+import Control.Monad.Trans.Except (ExceptT(..))
95+import Control.Monad.Trans.Identity (IdentityT(..))
96+import Control.Monad.Trans.List (ListT(..))
97+import Control.Monad.Trans.Maybe (MaybeT(..))
9198import Control.Monad.Trans.Reader (ReaderT(..))
92−import Control.Monad.Trans.State.Lazy (StateT(..))
93−import qualified Control.Monad.Trans.State.Strict as Strict
94− (StateT(..))
99+import Control.Monad.Trans.RWS.Lazy as Lazy (RWST(..))
100+import Control.Monad.Trans.RWS.Strict as Strict (RWST(..))
101+import Control.Monad.Trans.State.Lazy as Lazy (StateT(..))
102+import Control.Monad.Trans.State.Strict as Strict (StateT(..))
103+import Control.Monad.Trans.Writer.Lazy as Lazy (WriterT(..))
104+import Control.Monad.Trans.Writer.Strict as Strict (WriterT(..))
95105import Control.Monad.Trans.Class (MonadTrans(..))
96106import Control.Monad.Fix (MonadFix)
97107import Control.Monad.Ref (MonadAtomicRef(..), MonadRef(..))
@@ -192,23 +202,28 @@ type MonadJSM = MonadIO
192202#else
193203class (Applicative m, MonadIO m) => MonadJSM m where
194204 liftJSM' :: JSM a -> m a
195− {-# MINIMAL liftJSM' #-}
196205
197−instance MonadJSM JSM where
198− liftJSM' = id
199− {-# INLINE liftJSM' #-}
200−
201−instance MonadJSM m => MonadJSM (ReaderT e m) where
202− liftJSM' = lift . liftJSM'
206+ default liftJSM' :: (MonadJSM m', MonadTrans t) => JSM a' -> t m' a'
207+ liftJSM' = lift . (liftJSM' :: MonadJSM m' => JSM a -> m' a)
203208 {-# INLINE liftJSM' #-}
204209
205−instance MonadJSM m => MonadJSM (StateT r m) where
206− liftJSM' = lift . liftJSM'
210+instance MonadJSM JSM where
211+ liftJSM' = id
207212 {-# INLINE liftJSM' #-}
208213
209−instance MonadJSM m => MonadJSM (Strict.StateT r m) where
210− liftJSM' = lift . liftJSM'
211− {-# INLINE liftJSM' #-}
214+instance (MonadJSM m) => MonadJSM (ContT r m)
215+instance (Error e, MonadJSM m) => MonadJSM (ErrorT e m)
216+instance (MonadJSM m) => MonadJSM (ExceptT e m)
217+instance (MonadJSM m) => MonadJSM (IdentityT m)
218+instance (MonadJSM m) => MonadJSM (ListT m)
219+instance (MonadJSM m) => MonadJSM (MaybeT m)
220+instance (MonadJSM m) => MonadJSM (ReaderT r m)
221+instance (Monoid w, MonadJSM m) => MonadJSM (Lazy.RWST r w s m)
222+instance (Monoid w, MonadJSM m) => MonadJSM (Strict.RWST r w s m)
223+instance (MonadJSM m) => MonadJSM (Lazy.StateT s m)
224+instance (MonadJSM m) => MonadJSM (Strict.StateT s m)
225+instance (Monoid w, MonadJSM m) => MonadJSM (Lazy.WriterT w m)
226+instance (Monoid w, MonadJSM m) => MonadJSM (Strict.WriterT w m)
212227
213228instance MonadRef JSM where
214229 type Ref JSM = Ref IO