@@ -46,6 +46,7 @@ import Reflex.Requester.Base
4646import qualified Control.Category
4747import Control.Lens hiding (element)
4848import Control.Monad.Reader
49+import qualified Control.Monad.State as Lazy
4950import Control.Monad.State.Strict
5051import Control.Monad.Trans.Control
5152import Data.Default
@@ -62,6 +63,7 @@ import GHCJS.DOM.Types (JSM)
6263
6364class Default (EventSpec d EventResult) => DomSpace d where
6465 type EventSpec d :: (EventTag -> *) -> *
66+ type RawDocument d :: *
6567 type RawTextNode d :: *
6668 type RawElement d :: *
6769 type RawFile d :: *
@@ -660,6 +662,11 @@ instance DomRenderHook t m => DomRenderHook t (StateT e m) where
660662 requestDomAction = lift . requestDomAction
661663 requestDomAction_ = lift . requestDomAction_
662664
665+instance DomRenderHook t m => DomRenderHook t (Lazy.StateT e m) where
666+ withRenderHook hook (Lazy.StateT a) = Lazy.StateT $ \s -> withRenderHook hook $ a s
667+ requestDomAction = lift . requestDomAction
668+ requestDomAction_ = lift . requestDomAction_
669+
663670deriving instance DomRenderHook t m => DomRenderHook t (EventWriterT t w m)
664671deriving instance DomRenderHook t m => DomRenderHook t (RequesterT t req rsp m)
665672deriving instance DomRenderHook t m => DomRenderHook t (PostBuildT t m)
@@ -668,3 +675,22 @@ deriving instance DomRenderHook t m => DomRenderHook t (QueryT t q m)
668675{-# DEPRECATED liftElementConfig "Use 'id' instead; this function is no longer necessary" #-}
669676liftElementConfig :: ElementConfig er t s -> ElementConfig er t s
670677liftElementConfig = id
678+
679+class Monad m => HasDocument m where
680+ askDocument :: m (RawDocument (DomBuilderSpace m))
681+ default askDocument
682+ :: ( m ~ f m'
683+ , RawDocument (DomBuilderSpace m) ~ RawDocument (DomBuilderSpace m')
684+ , MonadTrans f
685+ , Monad m'
686+ , HasDocument m'
687+ )
688+ => m (RawDocument (DomBuilderSpace m))
689+ askDocument = lift askDocument
690+
691+instance HasDocument m => HasDocument (ReaderT r m)
692+instance HasDocument m => HasDocument (EventWriterT t w m)
693+instance HasDocument m => HasDocument (DynamicWriterT t w m)
694+instance HasDocument m => HasDocument (PostBuildT t m)
695+instance HasDocument m => HasDocument (RequesterT t request response m)
696+instance HasDocument m => HasDocument (QueryT t q m)