on develop help sign in
Add instance HasJS x (ReaderT r m)
1eb42c2Ryan Trinkle
src/Foreign/JavaScript/TH.hs+7−2
@@ -1,4 +1,4 @@
1−{-# LANGUAGE ForeignFunctionInterface, CPP, TemplateHaskell, TypeFamilies, TypeSynonymInstances, FlexibleInstances, MultiParamTypeClasses, StandaloneDeriving, GeneralizedNewtypeDeriving, ExistentialQuantification, FunctionalDependencies, EmptyDataDecls, FlexibleContexts, RankNTypes #-}
1+{-# LANGUAGE ForeignFunctionInterface, CPP, TemplateHaskell, TypeFamilies, TypeSynonymInstances, FlexibleInstances, MultiParamTypeClasses, StandaloneDeriving, GeneralizedNewtypeDeriving, ExistentialQuantification, FunctionalDependencies, EmptyDataDecls, FlexibleContexts, RankNTypes, UndecidableInstances #-}
2#ifdef __GHCJS__
2#ifdef __GHCJS__
3{-# LANGUAGE JavaScriptFFI #-}
3{-# LANGUAGE JavaScriptFFI #-}
4#endif
4#endif
@@ -33,6 +33,7 @@ import Control.Monad
33import Control.Monad.Fix
33import Control.Monad.Fix
34import Control.Monad.IO.Class
34import Control.Monad.IO.Class
35import Control.Monad.Exception
35import Control.Monad.Exception
36+import Control.Monad.Reader
36import Foreign.Marshal
37import Foreign.Marshal
37import Data.ByteString (ByteString)
38import Data.ByteString (ByteString)
38import qualified Data.ByteString as BS
39import qualified Data.ByteString as BS
@@ -59,10 +60,14 @@ instance FromJS x (JSFun x) where
59class IsJSContext x where
60class IsJSContext x where
60 data JSRef x
61 data JSRef x
61
62
62−class (MonadIO (JSM m), MonadFix (JSM m), MonadJS x (JSM m)) => HasJS x m | m -> x where
63+class (Monad m, MonadIO (JSM m), MonadFix (JSM m), MonadJS x (JSM m)) => HasJS x m | m -> x where
63 type JSM m :: * -> *
64 type JSM m :: * -> *
64 liftJS :: JSM m a -> m a
65 liftJS :: JSM m a -> m a
65
66
67+instance HasJS x m => HasJS x (ReaderT r m) where
68+ type JSM (ReaderT r m) = JSM m
69+ liftJS = lift . liftJS
70+
66-- | A Monad that is capable of executing JavaScript
71-- | A Monad that is capable of executing JavaScript
67class Monad m => MonadJS x m | m -> x where
72class Monad m => MonadJS x m | m -> x where
68 runJS :: JSFFI -> [JSRef x] -> m (JSRef x)
73 runJS :: JSFFI -> [JSRef x] -> m (JSRef x)