@@ -306,7 +306,20 @@ data CacheSubscribed x a
306306#endif
307307 }
308308
309−
309+nowSpiderEventM :: (HasSpiderTimeline x) => EventM x (R.Event (SpiderTimeline x) ())
310+nowSpiderEventM =
311+ SpiderEvent <$> now
312+
313+now :: (MonadIO m, Defer (Some Clear) m, HasSpiderTimeline x
314+ ) => m (Event x ())
315+now = do
316+ nowOrNot <- liftIO $ newIORef $ Just ()
317+ scheduleClear nowOrNot
318+ return . Event $ \_ -> do
319+ occ <- liftIO . readIORef $ nowOrNot
320+ return ( EventSubscription (return ()) eventSubscribedNow
321+ , occ
322+ )
310323
311324-- | Construct an 'Event' whose value is guaranteed not to be recomputed
312325-- repeatedly
@@ -593,6 +606,16 @@ eventSubscribedNever = EventSubscribed
593606 , eventSubscribedWhoCreated = return ["never"]
594607#endif
595608 }
609+eventSubscribedNow :: EventSubscribed x
610+eventSubscribedNow = EventSubscribed
611+ { eventSubscribedHeightRef = zeroRef
612+ , eventSubscribedRetained = toAny ()
613+#ifdef DEBUG_CYCLES
614+ , eventSubscribedGetParents = return []
615+ , eventSubscribedHasOwnHeightRef = False
616+ , eventSubscribedWhoCreated = return ["now"]
617+#endif
618+ }
596619
597620eventSubscribedFan :: FanSubscribed x k v -> EventSubscribed x
598621eventSubscribedFan !subscribed = EventSubscribed
@@ -2496,6 +2519,8 @@ instance HasSpiderTimeline x => Reflex.Class.MonadHold (SpiderTimeline x) (Event
24962519 {-# INLINABLE headE #-}
24972520 headE = R.slowHeadE
24982521-- headE (SpiderEvent e) = SpiderEvent <$> Reflex.Spider.Internal.headE e
2522+ {-# INLINABLE now #-}
2523+ now = nowSpiderEventM
24992524
25002525instance Reflex.Class.MonadSample (SpiderTimeline x) (SpiderPullM x) where
25012526 {-# INLINABLE sample #-}
@@ -2517,6 +2542,9 @@ instance HasSpiderTimeline x => Reflex.Class.MonadHold (SpiderTimeline x) (Spide
25172542 {-# INLINABLE headE #-}
25182543 headE = R.slowHeadE
25192544-- headE (SpiderEvent e) = SpiderPushM $ SpiderEvent <$> Reflex.Spider.Internal.headE e
2545+ {-# INLINABLE now #-}
2546+ now = SpiderPushM nowSpiderEventM
2547+
25202548
25212549instance HasSpiderTimeline x => Monad (Reflex.Class.Dynamic (SpiderTimeline x)) where
25222550 {-# INLINE return #-}
@@ -2580,6 +2608,9 @@ instance HasSpiderTimeline x => Reflex.Class.MonadHold (SpiderTimeline x) (Spide
25802608 buildDynamic getV0 e = runFrame . runSpiderHostFrame $ Reflex.Class.buildDynamic getV0 e
25812609 {-# INLINABLE headE #-}
25822610 headE e = runFrame . runSpiderHostFrame $ Reflex.Class.headE e
2611+ {-# INLINABLE now #-}
2612+ now = runFrame . runSpiderHostFrame $ Reflex.Class.now
2613+
25832614
25842615instance HasSpiderTimeline x => Reflex.Class.MonadSample (SpiderTimeline x) (SpiderHostFrame x) where
25852616 sample = SpiderHostFrame . readBehaviorUntracked . unSpiderBehavior --TODO: This can cause problems with laziness, so we should get rid of it if we can
@@ -2596,6 +2627,8 @@ instance HasSpiderTimeline x => Reflex.Class.MonadHold (SpiderTimeline x) (Spide
25962627 {-# INLINABLE headE #-}
25972628 headE = R.slowHeadE
25982629-- headE (SpiderEvent e) = SpiderHostFrame $ SpiderEvent <$> Reflex.Spider.Internal.headE e
2630+ {-# INLINABLE now #-}
2631+ now = SpiderHostFrame Reflex.Class.now
25992632
26002633instance HasSpiderTimeline x => Reflex.Class.MonadSample (SpiderTimeline x) (SpiderHost x) where
26012634 {-# INLINABLE sample #-}
@@ -2616,6 +2649,8 @@ instance HasSpiderTimeline x => Reflex.Class.MonadHold (SpiderTimeline x) (Refle
26162649 buildDynamic getV0 e = Reflex.Spider.Internal.ReadPhase $ Reflex.Class.buildDynamic getV0 e
26172650 {-# INLINABLE headE #-}
26182651 headE e = Reflex.Spider.Internal.ReadPhase $ Reflex.Class.headE e
2652+ {-# INLINABLE now #-}
2653+ now = Reflex.Spider.Internal.ReadPhase Reflex.Class.now
26192654
26202655--------------------------------------------------------------------------------
26212656-- Deprecated items