@@ -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 #-}
22#ifdef __GHCJS__
33{-# LANGUAGE JavaScriptFFI #-}
44#endif
@@ -33,6 +33,7 @@ import Control.Monad
3333import Control.Monad.Fix
3434import Control.Monad.IO.Class
3535import Control.Monad.Exception
36+import Control.Monad.Reader
3637import Foreign.Marshal
3738import Data.ByteString (ByteString)
3839import qualified Data.ByteString as BS
@@ -59,10 +60,14 @@ instance FromJS x (JSFun x) where
5960class IsJSContext x where
6061 data JSRef x
6162
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
6364 type JSM m :: * -> *
6465 liftJS :: JSM m a -> m a
6566
67+instance HasJS x m => HasJS x (ReaderT r m) where
68+ type JSM (ReaderT r m) = JSM m
69+ liftJS = lift . liftJS
70+
6671-- | A Monad that is capable of executing JavaScript
6772class Monad m => MonadJS x m | m -> x where
6873 runJS :: JSFFI -> [JSRef x] -> m (JSRef x)