@@ -2,6 +2,7 @@
2{-# LANGUAGE CPP #-}
2{-# LANGUAGE CPP #-}
3{-# LANGUAGE ConstraintKinds #-}
3{-# LANGUAGE ConstraintKinds #-}
4{-# LANGUAGE DataKinds #-}
4{-# LANGUAGE DataKinds #-}
5+{-# LANGUAGE DefaultSignatures #-}
5{-# LANGUAGE EmptyDataDecls #-}
6{-# LANGUAGE EmptyDataDecls #-}
6{-# LANGUAGE FlexibleContexts #-}
7{-# LANGUAGE FlexibleContexts #-}
7{-# LANGUAGE FlexibleInstances #-}
8{-# LANGUAGE FlexibleInstances #-}
@@ -26,7 +27,6 @@ module Reflex.Dom.Builder.Immediate
26 , ImmediateDomBuilderEnv (..)
27 , ImmediateDomBuilderEnv (..)
27 , ImmediateDomBuilderT (..)
28 , ImmediateDomBuilderT (..)
28 , runImmediateDomBuilderT
29 , runImmediateDomBuilderT
30 , askParent
30 , askParent
31 , askEvents
31 , askEvents
@@ -49,6 +49,7 @@ module Reflex.Dom.Builder.Immediate
49 , Pair1 (..)
49 , Pair1 (..)
50 , Maybe1 (..)
50 , Maybe1 (..)
51 , GhcjsEventSpec (..)
51 , GhcjsEventSpec (..)
52 , ghcjsEventSpec_filters
53 , ghcjsEventSpec_filters
53 , ghcjsEventSpec_handler
54 , ghcjsEventSpec_handler
54 , GhcjsEventHandler (..)
55 , GhcjsEventHandler (..)
@@ -81,10 +82,13 @@ import Foreign.JavaScript.TH
81import Reflex.Class as Reflex
82import Reflex.Class as Reflex
82import Reflex.Dom.Builder.Class
83import Reflex.Dom.Builder.Class
83import Reflex.Dynamic
84import Reflex.Dynamic
85+import Reflex.DynamicWriter (DynamicWriterT)
86+import Reflex.EventWriter (EventWriterT)
84import Reflex.Host.Class
87import Reflex.Host.Class
85import qualified Reflex.Patch.DMap as PatchDMap
88import qualified Reflex.Patch.DMap as PatchDMap
86import qualified Reflex.Patch.DMapWithMove as PatchDMapWithMove
89import qualified Reflex.Patch.DMapWithMove as PatchDMapWithMove
87import Reflex.PerformEvent.Class
90import Reflex.PerformEvent.Class
91+import Reflex.PostBuild.Base
88import Reflex.PostBuild.Class
92import Reflex.PostBuild.Class
89import Reflex.TriggerEvent.Base hiding (askEvents)
93import Reflex.TriggerEvent.Base hiding (askEvents)
90import qualified Reflex.TriggerEvent.Base as TriggerEventT (askEvents)
94import qualified Reflex.TriggerEvent.Base as TriggerEventT (askEvents)
@@ -96,6 +100,8 @@ import Control.Monad.Exception
96import Control.Monad.Primitive
100import Control.Monad.Primitive
97import Control.Monad.Reader
101import Control.Monad.Reader
98import Control.Monad.Ref
102import Control.Monad.Ref
103+import Control.Monad.State.Strict (StateT)
104+import qualified Control.Monad.State as Lazy (StateT)
99#ifndef USE_TEMPLATE_HASKELL
105#ifndef USE_TEMPLATE_HASKELL
100import Data.Functor.Contravariant (phantom)
106import Data.Functor.Contravariant (phantom)
@@ -215,9 +221,21 @@ runImmediateDomBuilderT (ImmediateDomBuilderT a) env eventChan = flip runTrigger
215 _ <- Window.requestAnimationFrame win cb
221 _ <- Window.requestAnimationFrame win cb
216 return ()
222 return ()
224+class Monad m => HasDocument m where
225+ askDocument :: m Document
226+ default askDocument :: (m ~ f m', MonadTrans f, Monad m', HasDocument m') => f m' Document
227+ askDocument = lift askDocument
229+instance HasDocument m => HasDocument (ReaderT r m)
230+instance HasDocument m => HasDocument (StateT s m)
231+instance HasDocument m => HasDocument (Lazy.StateT s m)
232+instance HasDocument m => HasDocument (EventWriterT t w m)
233+instance HasDocument m => HasDocument (DynamicWriterT t w m)
234+instance HasDocument m => HasDocument (PostBuildT t m)
236+instance Monad m => HasDocument (ImmediateDomBuilderT t m) where
218−{-# INLINABLE askDocument #-}
237+ {-# INLINABLE askDocument #-}
219−askDocument :: Monad m => ImmediateDomBuilderT t m Document
220−askDocument = ImmediateDomBuilderT $ asks _immediateDomBuilderEnv_document
238+ askDocument = ImmediateDomBuilderT $ asks _immediateDomBuilderEnv_document
222{-# INLINABLE askParent #-}
240{-# INLINABLE askParent #-}
223askParent :: Monad m => ImmediateDomBuilderT t m Node
241askParent :: Monad m => ImmediateDomBuilderT t m Node