@@ -156,6 +156,7 @@ module Reflex.Class
156156 -- * Deprecated functions
157157 , switchPromptly
158158 , switchPromptOnly
159+ , buildDynamic
159160 -- * "Cheap" functions
160161 , fmapMaybeCheap
161162 , mapMaybeCheap
@@ -388,6 +389,9 @@ instance (Reflex t, Default a) => Default (Dynamic t a) where
388389class (Applicative m , Monad m ) => MonadSample t m | m -> t where
389390 -- | Get the current value in the 'Behavior'
390391 sample :: Behavior t a -> m a
392+ {-# INLINABLE sample #-}
393+ default sample :: (m ~ f m' , MonadTrans f , MonadSample t m' ) => Behavior t a -> m a
394+ sample = lift . sample
391395
392396-- | 'MonadHold' designates monads that can create new 'Behavior's based on
393397-- 'Event's; usually this will be 'PushM' or a monad based on it. 'MonadHold'
@@ -400,33 +404,39 @@ class MonadSample t m => MonadHold t m where
400404 -- the 'Behavior', it will see the __old__ value of the 'Behavior', not the new
401405 -- one.
402406 hold :: a -> Event t a -> m (Behavior t a )
407+ {-# INLINABLE hold #-}
403408 default hold :: (m ~ f m' , MonadTrans f , MonadHold t m' ) => a -> Event t a -> m (Behavior t a )
404409 hold v0 = lift . hold v0
405410 -- | Create a 'Dynamic' value using the given initial value that changes every
406411 -- time the 'Event' occurs.
407412 holdDyn :: a -> Event t a -> m (Dynamic t a )
413+ {-# INLINABLE holdDyn #-}
408414 default holdDyn :: (m ~ f m' , MonadTrans f , MonadHold t m' ) => a -> Event t a -> m (Dynamic t a )
409415 holdDyn v0 = lift . holdDyn v0
410416 -- | Create an 'Incremental' value using the given initial value that changes
411417 -- every time the 'Event' occurs.
412418 holdIncremental :: Patch p => PatchTarget p -> Event t p -> m (Incremental t p )
419+ {-# INLINABLE holdIncremental #-}
413420 default holdIncremental :: (Patch p , m ~ f m' , MonadTrans f , MonadHold t m' ) => PatchTarget p -> Event t p -> m (Incremental t p )
414421 holdIncremental v0 = lift . holdIncremental v0
415- buildDynamic :: PushM t a -> Event t a -> m (Dynamic t a )
416- {-
417- default buildDynamic :: (m ~ f m', MonadTrans f, MonadHold t m') => PullM t a -> Event t a -> m (Dynamic t a)
418- buildDynamic getV0 = lift . buildDynamic getV0
419- -}
420422 -- | Create a new 'Event' that only occurs only once, on the first occurrence of
421423 -- the supplied 'Event'.
422424 headE :: Event t a -> m (Event t a )
425+ {-# INLINABLE headE #-}
426+ default headE :: (m ~ f m' , MonadTrans f , MonadHold t m' ) => Event t a -> m (Event t a )
427+ headE = lift . headE
423428 -- | An event which only occurs at the current moment in time, such that:
424429 --
425430 -- > coincidence (pushAlways (\a -> (a <$) <$> now) e) = e
426431 --
427432 now :: m (Event t () )
433+ {-# INLINABLE now #-}
428434 default now :: (m ~ f m' , MonadTrans f , MonadHold t m' ) => m (Event t () )
429435 now = lift now
436+ {-# INLINABLE liftPushM #-}
437+ liftPushM :: PushM t a -> m a
438+ default liftPushM :: (m ~ f m' , MonadTrans f , MonadHold t m' ) => PushM t a -> m a
439+ liftPushM = lift . liftPushM
430440
431441-- | Accumulate an 'Incremental' with the supplied initial value and the firings of the provided 'Event',
432442-- using the combining function to produce a patch.
@@ -570,7 +580,6 @@ instance MonadHold t m => MonadHold t (ReaderT r m) where
570580 hold a0 = lift . hold a0
571581 holdDyn a0 = lift . holdDyn a0
572582 holdIncremental a0 = lift . holdIncremental a0
573- buildDynamic a0 = lift . buildDynamic a0
574583 headE = lift . headE
575584 now = lift now
576585
@@ -581,7 +590,6 @@ instance (MonadHold t m, Monoid r) => MonadHold t (WriterT r m) where
581590 hold a0 = lift . hold a0
582591 holdDyn a0 = lift . holdDyn a0
583592 holdIncremental a0 = lift . holdIncremental a0
584- buildDynamic a0 = lift . buildDynamic a0
585593 headE = lift . headE
586594 now = lift now
587595
@@ -592,7 +600,6 @@ instance MonadHold t m => MonadHold t (StateT s m) where
592600 hold a0 = lift . hold a0
593601 holdDyn a0 = lift . holdDyn a0
594602 holdIncremental a0 = lift . holdIncremental a0
595- buildDynamic a0 = lift . buildDynamic a0
596603 headE = lift . headE
597604 now = lift now
598605
@@ -603,7 +610,6 @@ instance MonadHold t m => MonadHold t (ExceptT e m) where
603610 hold a0 = lift . hold a0
604611 holdDyn a0 = lift . holdDyn a0
605612 holdIncremental a0 = lift . holdIncremental a0
606- buildDynamic a0 = lift . buildDynamic a0
607613 headE = lift . headE
608614 now = lift now
609615
@@ -614,7 +620,6 @@ instance (MonadHold t m, Monoid w) => MonadHold t (RWST r w s m) where
614620 hold a0 = lift . hold a0
615621 holdDyn a0 = lift . holdDyn a0
616622 holdIncremental a0 = lift . holdIncremental a0
617- buildDynamic a0 = lift . buildDynamic a0
618623 headE = lift . headE
619624 now = lift now
620625
@@ -625,7 +630,6 @@ instance MonadHold t m => MonadHold t (ContT r m) where
625630 hold a0 = lift . hold a0
626631 holdDyn a0 = lift . holdDyn a0
627632 holdIncremental a0 = lift . holdIncremental a0
628- buildDynamic a0 = lift . buildDynamic a0
629633 headE = lift . headE
630634 now = lift now
631635
@@ -1693,3 +1697,9 @@ switchPromptly = switchHoldPromptly
16931697-- | See 'switchHoldPromptOnly'
16941698switchPromptOnly :: (Reflex t , MonadHold t m ) => Event t a -> Event t (Event t a ) -> m (Event t a )
16951699switchPromptOnly = switchHoldPromptOnly
1700+
1701+ {-# DEPRECATED buildDynamic "Sample directly and use 'liftPushM'" #-}
1702+ buildDynamic :: (MonadHold t m ) => PushM t a -> Event t a -> m (Dynamic t a )
1703+ buildDynamic initialValue e = do
1704+ iv <- liftPushM initialValue
1705+ holdDyn iv e
0 commit comments