on master help sign in
Add default for MonadJSM liftJSM'
0a2cfc6Hamish Mackenzie
jsaddle/src/Language/Javascript/JSaddle/Types.hs+30−15
@@ -14,6 +14,7 @@
14#endif
14#endif
15{-# LANGUAGE ConstraintKinds #-}
15{-# LANGUAGE ConstraintKinds #-}
16{-# LANGUAGE KindSignatures #-}
16{-# LANGUAGE KindSignatures #-}
17+{-# LANGUAGE AllowAmbiguousTypes #-}
17-----------------------------------------------------------------------------
18-----------------------------------------------------------------------------
18--
19--
19-- Module : Language.Javascript.JSaddle.Types
20-- Module : Language.Javascript.JSaddle.Types
@@ -88,10 +89,19 @@ import GHCJS.Nullable (Nullable(..))
88import GHCJS.Prim.Internal (JSVal(..), JSValueRef)
89import GHCJS.Prim.Internal (JSVal(..), JSValueRef)
89import Data.JSString.Internal.Type (JSString(..))
90import Data.JSString.Internal.Type (JSString(..))
90import Control.DeepSeq (NFData(..))
91import 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(..))
91import Control.Monad.Trans.Reader (ReaderT(..))
98import Control.Monad.Trans.Reader (ReaderT(..))
92−import Control.Monad.Trans.State.Lazy (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(..))
93−import qualified Control.Monad.Trans.State.Strict as Strict
102+import Control.Monad.Trans.State.Strict as Strict (StateT(..))
94− (StateT(..))
103+import Control.Monad.Trans.Writer.Lazy as Lazy (WriterT(..))
104+import Control.Monad.Trans.Writer.Strict as Strict (WriterT(..))
95import Control.Monad.Trans.Class (MonadTrans(..))
105import Control.Monad.Trans.Class (MonadTrans(..))
96import Control.Monad.Fix (MonadFix)
106import Control.Monad.Fix (MonadFix)
97import Control.Monad.Ref (MonadAtomicRef(..), MonadRef(..))
107import Control.Monad.Ref (MonadAtomicRef(..), MonadRef(..))
@@ -192,23 +202,28 @@ type MonadJSM = MonadIO
192#else
202#else
193class (Applicative m, MonadIO m) => MonadJSM m where
203class (Applicative m, MonadIO m) => MonadJSM m where
194 liftJSM' :: JSM a -> m a
204 liftJSM' :: JSM a -> m a
195− {-# MINIMAL liftJSM' #-}
196
205
197−instance MonadJSM JSM where
206+ default liftJSM' :: (MonadJSM m', MonadTrans t) => JSM a' -> t m' a'
198− liftJSM' = id
199− {-# INLINE liftJSM' #-}
200−
201−instance MonadJSM m => MonadJSM (ReaderT e m) where
202− liftJSM' = lift . liftJSM'
207+ liftJSM' = lift . (liftJSM' :: MonadJSM m' => JSM a -> m' a)
203 {-# INLINE liftJSM' #-}
208 {-# INLINE liftJSM' #-}
204
209
205−instance MonadJSM m => MonadJSM (StateT r m) where
210+instance MonadJSM JSM where
206− liftJSM' = lift . liftJSM'
211+ liftJSM' = id
207 {-# INLINE liftJSM' #-}
212 {-# INLINE liftJSM' #-}
208
213
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)
209−instance MonadJSM m => MonadJSM (Strict.StateT r m) where
222+instance (Monoid w, MonadJSM m) => MonadJSM (Strict.RWST r w s m)
210− liftJSM' = lift . liftJSM'
223+instance (MonadJSM m) => MonadJSM (Lazy.StateT s m)
211− {-# INLINE liftJSM' #-}
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)
212
227
213instance MonadRef JSM where
228instance MonadRef JSM where
214 type Ref JSM = Ref IO
229 type Ref JSM = Ref IO