on develop help sign in
Add instances for reflex Query
7447336Hamish Mackenzie
reflex-dom-core/src/Foreign/JavaScript/Orphans.hs+7−15
@@ -14,23 +14,15 @@ import Reflex.PerformEvent.Base (PerformEventT (..))
14import Reflex.PostBuild.Base (PostBuildT)
14import Reflex.PostBuild.Base (PostBuildT)
15import Reflex.Requester.Base (RequesterT)
15import Reflex.Requester.Base (RequesterT)
16import Reflex.TriggerEvent.Base
16import Reflex.TriggerEvent.Base
17+import Reflex.Query.Base (QueryT)
17
18
18−instance (MonadJSM m, ReflexHost t) => MonadJSM (PostBuildT t m) where
19+instance (MonadJSM m, ReflexHost t) => MonadJSM (PostBuildT t m)
19− liftJSM' = lift . liftJSM'
20−
21instance (MonadJSM (HostFrame t), ReflexHost t) => MonadJSM (PerformEventT t m) where
20instance (MonadJSM (HostFrame t), ReflexHost t) => MonadJSM (PerformEventT t m) where
22 liftJSM' = PerformEventT . lift . liftJSM'
21 liftJSM' = PerformEventT . lift . liftJSM'
23−
24−instance MonadJSM m => MonadJSM (DynamicWriterT t w m) where
22+instance MonadJSM m => MonadJSM (DynamicWriterT t w m)
25− liftJSM' = lift . liftJSM'
26−
27−instance MonadJSM m => MonadJSM (EventWriterT t w m) where
23+instance MonadJSM m => MonadJSM (EventWriterT t w m)
28− liftJSM' = lift . liftJSM'
29−
30−instance MonadJSM m => MonadJSM (RequesterT t request response m) where
24+instance MonadJSM m => MonadJSM (RequesterT t request response m)
31− liftJSM' = lift . liftJSM'
32−
33−instance MonadJSM m => MonadJSM (TriggerEventT t m) where
25+instance MonadJSM m => MonadJSM (TriggerEventT t m)
34− liftJSM' = lift . liftJSM'
26+instance MonadJSM m => MonadJSM (QueryT t q m)
35
27
36#endif
28#endif
reflex-dom-core/src/Foreign/JavaScript/TH.hs+9
@@ -35,6 +35,7 @@ import Reflex.PerformEvent.Base
35import Reflex.PerformEvent.Class
35import Reflex.PerformEvent.Class
36import Reflex.PostBuild.Base
36import Reflex.PostBuild.Base
37import Reflex.Requester.Base
37import Reflex.Requester.Base
38+import Reflex.Query.Base (QueryT(..))
38
39
39#ifdef USE_TEMPLATE_HASKELL
40#ifdef USE_TEMPLATE_HASKELL
40import Language.Haskell.TH
41import Language.Haskell.TH
@@ -125,6 +126,10 @@ instance HasJSContext m => HasJSContext (RequesterT t request response m) where
125 type JSContextPhantom (RequesterT t request response m) = JSContextPhantom m
126 type JSContextPhantom (RequesterT t request response m) = JSContextPhantom m
126 askJSContext = lift askJSContext
127 askJSContext = lift askJSContext
127
128
129+instance HasJSContext m => HasJSContext (QueryT t q m) where
130+ type JSContextPhantom (QueryT t q m) = JSContextPhantom m
131+ askJSContext = QueryT askJSContext
132+
128newtype WithJSContextSingleton x m a = WithJSContextSingleton { unWithJSContextSingleton :: ReaderT (JSContextSingleton x) m a } deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadTrans, MonadException, MonadAsyncException)
133newtype WithJSContextSingleton x m a = WithJSContextSingleton { unWithJSContextSingleton :: ReaderT (JSContextSingleton x) m a } deriving (Functor, Applicative, Monad, MonadIO, MonadFix, MonadTrans, MonadException, MonadAsyncException)
129
134
130instance PrimMonad m => PrimMonad (WithJSContextSingleton x m) where
135instance PrimMonad m => PrimMonad (WithJSContextSingleton x m) where
@@ -248,6 +253,10 @@ instance HasJS x m => HasJS x (RequesterT t request response m) where
248 type JSX (RequesterT t request response m) = JSX m
253 type JSX (RequesterT t request response m) = JSX m
249 liftJS = lift . liftJS
254 liftJS = lift . liftJS
250
255
256+instance HasJS x m => HasJS x (QueryT t q m) where
257+ type JSX (QueryT t q m) = JSX m
258+ liftJS = lift . liftJS
259+
251-- | A Monad that is capable of executing JavaScript
260-- | A Monad that is capable of executing JavaScript
252class Monad m => MonadJS x m | m -> x where
261class Monad m => MonadJS x m | m -> x where
253 runJS :: JSFFI -> [JSRef x] -> m (JSRef x)
262 runJS :: JSFFI -> [JSRef x] -> m (JSRef x)
reflex-dom-core/src/Reflex/Dom/Builder/Class.hs+24
@@ -35,6 +35,8 @@ import Reflex.EventWriter
35import Reflex.PerformEvent.Class
35import Reflex.PerformEvent.Class
36import Reflex.PostBuild.Base
36import Reflex.PostBuild.Base
37import Reflex.Requester.Base
37import Reflex.Requester.Base
38+import Reflex.Query.Base
39+import Reflex.Query.Class
38
40
39import qualified Control.Category
41import qualified Control.Category
40import Control.Lens hiding (element)
42import Control.Lens hiding (element)
@@ -598,6 +600,27 @@ instance Reflex t => HasDomEvent t (TextAreaElement EventResult d t) en where
598instance DomBuilder t m => DomBuilder t (ReaderT r m) where
600instance DomBuilder t m => DomBuilder t (ReaderT r m) where
599 type DomBuilderSpace (ReaderT r m) = DomBuilderSpace m
601 type DomBuilderSpace (ReaderT r m) = DomBuilderSpace m
600
602
603+instance (DomBuilder t m, MonadFix m, MonadHold t m, Group q, Query q, Additive q) => DomBuilder t (QueryT t q m) where
604+ type DomBuilderSpace (QueryT t q m) = DomBuilderSpace m
605+ textNode = liftTextNode
606+ element elementTag cfg (QueryT child) = QueryT $ do
607+ s <- get
608+ let cfg' = cfg
609+ { _elementConfig_eventSpec = _elementConfig_eventSpec cfg }
610+ (e, (a, newS)) <- lift $ element elementTag cfg' $ runStateT child s
611+ put newS
612+ return (e, a)
613+
614+ inputElement = lift . inputElement
615+ textAreaElement = lift . textAreaElement
616+ selectElement cfg (QueryT child) = QueryT $ do
617+ s <- get
618+ (e, (a, newS)) <- lift $ selectElement cfg $ runStateT child s
619+ put newS
620+ return (e, a)
621+ placeRawElement = lift . placeRawElement
622+ wrapRawElement e = lift . wrapRawElement e
623+
601type LiftDomBuilder t f m =
624type LiftDomBuilder t f m =
602 ( Reflex t
625 ( Reflex t
603 , MonadTransControlStateless f
626 , MonadTransControlStateless f
@@ -650,6 +673,7 @@ deriving instance DomRenderHook t m => DomRenderHook t (EventWriterT t w m)
650deriving instance DomRenderHook t m => DomRenderHook t (RequesterT t req rsp m)
673deriving instance DomRenderHook t m => DomRenderHook t (RequesterT t req rsp m)
651#endif
674#endif
652deriving instance DomRenderHook t m => DomRenderHook t (PostBuildT t m)
675deriving instance DomRenderHook t m => DomRenderHook t (PostBuildT t m)
676+deriving instance DomRenderHook t m => DomRenderHook t (QueryT t q m)
653
677
654{-# DEPRECATED liftElementConfig "Use 'id' instead; this function is no longer necessary" #-}
678{-# DEPRECATED liftElementConfig "Use 'id' instead; this function is no longer necessary" #-}
655liftElementConfig :: ElementConfig er t s -> ElementConfig er t s
679liftElementConfig :: ElementConfig er t s -> ElementConfig er t s
reflex-dom-core/src/Reflex/Dom/Builder/Immediate.hs+3
@@ -93,6 +93,7 @@ import Reflex.PostBuild.Class
93import Reflex.TriggerEvent.Base hiding (askEvents)
93import Reflex.TriggerEvent.Base hiding (askEvents)
94import qualified Reflex.TriggerEvent.Base as TriggerEventT (askEvents)
94import qualified Reflex.TriggerEvent.Base as TriggerEventT (askEvents)
95import Reflex.TriggerEvent.Class
95import Reflex.TriggerEvent.Class
96+import Reflex.Query.Base (QueryT)
96
97
97import Control.Concurrent
98import Control.Concurrent
98import Control.Lens hiding (element, ix)
99import Control.Lens hiding (element, ix)
@@ -233,6 +234,8 @@ instance HasDocument m => HasDocument (Lazy.StateT s m)
233instance HasDocument m => HasDocument (EventWriterT t w m)
234instance HasDocument m => HasDocument (EventWriterT t w m)
234instance HasDocument m => HasDocument (DynamicWriterT t w m)
235instance HasDocument m => HasDocument (DynamicWriterT t w m)
235instance HasDocument m => HasDocument (PostBuildT t m)
236instance HasDocument m => HasDocument (PostBuildT t m)
237+instance HasDocument m => HasDocument (RequesterT t request response m)
238+instance HasDocument m => HasDocument (QueryT t q m)
236
239
237instance Monad m => HasDocument (ImmediateDomBuilderT t m) where
240instance Monad m => HasDocument (ImmediateDomBuilderT t m) where
238 {-# INLINABLE askDocument #-}
241 {-# INLINABLE askDocument #-}