@@ -46,6 +46,7 @@ import Reflex.Requester.Base
46import qualified Control.Category
46import qualified Control.Category
47import Control.Lens hiding (element)
47import Control.Lens hiding (element)
48import Control.Monad.Reader
48import Control.Monad.Reader
49+import qualified Control.Monad.State as Lazy
49import Control.Monad.State.Strict
50import Control.Monad.State.Strict
50import Control.Monad.Trans.Control
51import Control.Monad.Trans.Control
51import Data.Default
52import Data.Default
@@ -62,6 +63,7 @@ import GHCJS.DOM.Types (JSM)
63class Default (EventSpec d EventResult) => DomSpace d where
64class Default (EventSpec d EventResult) => DomSpace d where
64 type EventSpec d :: (EventTag -> *) -> *
65 type EventSpec d :: (EventTag -> *) -> *
66+ type RawDocument d :: *
65 type RawTextNode d :: *
67 type RawTextNode d :: *
66 type RawElement d :: *
68 type RawElement d :: *
67 type RawFile d :: *
69 type RawFile d :: *
@@ -660,6 +662,11 @@ instance DomRenderHook t m => DomRenderHook t (StateT e m) where
660 requestDomAction = lift . requestDomAction
662 requestDomAction = lift . requestDomAction
661 requestDomAction_ = lift . requestDomAction_
663 requestDomAction_ = lift . requestDomAction_
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_
663deriving instance DomRenderHook t m => DomRenderHook t (EventWriterT t w m)
670deriving instance DomRenderHook t m => DomRenderHook t (EventWriterT t w m)
664deriving instance DomRenderHook t m => DomRenderHook t (RequesterT t req rsp m)
671deriving instance DomRenderHook t m => DomRenderHook t (RequesterT t req rsp m)
665deriving instance DomRenderHook t m => DomRenderHook t (PostBuildT t m)
672deriving instance DomRenderHook t m => DomRenderHook t (PostBuildT t m)
@@ -668,3 +675,22 @@ deriving instance DomRenderHook t m => DomRenderHook t (QueryT t q m)
668{-# DEPRECATED liftElementConfig "Use 'id' instead; this function is no longer necessary" #-}
675{-# DEPRECATED liftElementConfig "Use 'id' instead; this function is no longer necessary" #-}
669liftElementConfig :: ElementConfig er t s -> ElementConfig er t s
676liftElementConfig :: ElementConfig er t s -> ElementConfig er t s
670liftElementConfig = id
677liftElementConfig = id
679+class Monad m => HasDocument m where
680+ askDocument :: m (RawDocument (DomBuilderSpace m))
683+ , RawDocument (DomBuilderSpace m) ~ RawDocument (DomBuilderSpace m')
688+ => m (RawDocument (DomBuilderSpace m))
689+ askDocument = lift askDocument
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)