@@ -104,7 +104,6 @@ module Reflex.Class
104 , numberOccurrencesFrom_
104 , numberOccurrencesFrom_
109 , headTailE
108 , headTailE
110 , takeWhileE
109 , takeWhileE
@@ -459,6 +458,14 @@ class MonadSample t m => MonadHold t m where
459 buildDynamic :: PullM t a -> Event t a -> m (Dynamic t a)
458 buildDynamic :: PullM t a -> Event t a -> m (Dynamic t a)
460 default buildDynamic :: (m ~ f m', MonadTrans f, MonadHold t m') => PullM t a -> Event t a -> m (Dynamic t a)
459 default buildDynamic :: (m ~ f m', MonadTrans f, MonadHold t m') => PullM t a -> Event t a -> m (Dynamic t a)
461 buildDynamic getV0 = lift . buildDynamic getV0
460 buildDynamic getV0 = lift . buildDynamic getV0
461+ -- | Create a new 'Event' that only occurs only once, on the first occurence of
462+ -- the supplied 'Event'.
463+ headE :: Event t a -> m (Event t a)
464+ default headE :: (Reflex t, MonadFix m) => Event t a -> m (Event t a)
466+ rec be <- hold e $ fmapCheap (const never) e'
463-- | An 'EventSelector' allows you to efficiently 'select' an 'Event' based on a
470-- | An 'EventSelector' allows you to efficiently 'select' an 'Event' based on a
464-- key. This is much more efficient than filtering for each key with
471-- key. This is much more efficient than filtering for each key with
@@ -488,6 +495,7 @@ instance MonadHold t m => MonadHold t (ReaderT r m) where
488 holdDyn a0 = lift . holdDyn a0
495 holdDyn a0 = lift . holdDyn a0
489 holdIncremental a0 = lift . holdIncremental a0
496 holdIncremental a0 = lift . holdIncremental a0
490 buildDynamic a0 = lift . buildDynamic a0
497 buildDynamic a0 = lift . buildDynamic a0
498+ headE = lift . headE
492instance (MonadSample t m, Monoid r) => MonadSample t (WriterT r m) where
500instance (MonadSample t m, Monoid r) => MonadSample t (WriterT r m) where
493 sample = lift . sample
501 sample = lift . sample
@@ -497,6 +505,7 @@ instance (MonadHold t m, Monoid r) => MonadHold t (WriterT r m) where
497 holdDyn a0 = lift . holdDyn a0
505 holdDyn a0 = lift . holdDyn a0
498 holdIncremental a0 = lift . holdIncremental a0
506 holdIncremental a0 = lift . holdIncremental a0
499 buildDynamic a0 = lift . buildDynamic a0
507 buildDynamic a0 = lift . buildDynamic a0
508+ headE = lift . headE
501instance MonadSample t m => MonadSample t (StateT s m) where
510instance MonadSample t m => MonadSample t (StateT s m) where
502 sample = lift . sample
511 sample = lift . sample
@@ -506,6 +515,7 @@ instance MonadHold t m => MonadHold t (StateT s m) where
506 holdDyn a0 = lift . holdDyn a0
515 holdDyn a0 = lift . holdDyn a0
507 holdIncremental a0 = lift . holdIncremental a0
516 holdIncremental a0 = lift . holdIncremental a0
508 buildDynamic a0 = lift . buildDynamic a0
517 buildDynamic a0 = lift . buildDynamic a0
518+ headE = lift . headE
510instance MonadSample t m => MonadSample t (ExceptT e m) where
520instance MonadSample t m => MonadSample t (ExceptT e m) where
511 sample = lift . sample
521 sample = lift . sample
@@ -514,6 +524,8 @@ instance MonadHold t m => MonadHold t (ExceptT e m) where
514 hold a0 = lift . hold a0
524 hold a0 = lift . hold a0
515 holdDyn a0 = lift . holdDyn a0
525 holdDyn a0 = lift . holdDyn a0
516 holdIncremental a0 = lift . holdIncremental a0
526 holdIncremental a0 = lift . holdIncremental a0
527+ buildDynamic a0 = lift . buildDynamic a0
528+ headE = lift . headE
518instance (MonadSample t m, Monoid w) => MonadSample t (RWST r w s m) where
530instance (MonadSample t m, Monoid w) => MonadSample t (RWST r w s m) where
519 sample = lift . sample
531 sample = lift . sample
@@ -522,6 +534,8 @@ instance (MonadHold t m, Monoid w) => MonadHold t (RWST r w s m) where
522 hold a0 = lift . hold a0
534 hold a0 = lift . hold a0
523 holdDyn a0 = lift . holdDyn a0
535 holdDyn a0 = lift . holdDyn a0
524 holdIncremental a0 = lift . holdIncremental a0
536 holdIncremental a0 = lift . holdIncremental a0
537+ buildDynamic a0 = lift . buildDynamic a0
538+ headE = lift . headE
526instance MonadSample t m => MonadSample t (ContT r m) where
540instance MonadSample t m => MonadSample t (ContT r m) where
527 sample = lift . sample
541 sample = lift . sample
@@ -530,6 +544,8 @@ instance MonadHold t m => MonadHold t (ContT r m) where
530 hold a0 = lift . hold a0
544 hold a0 = lift . hold a0
531 holdDyn a0 = lift . holdDyn a0
545 holdDyn a0 = lift . holdDyn a0
532 holdIncremental a0 = lift . holdIncremental a0
546 holdIncremental a0 = lift . holdIncremental a0
547+ buildDynamic a0 = lift . buildDynamic a0
548+ headE = lift . headE
534--------------------------------------------------------------------------------
550--------------------------------------------------------------------------------
535-- Convenience functions
551-- Convenience functions
@@ -652,14 +668,6 @@ attachWith f = attachWithMaybe $ \a b -> Just $ f a b
652attachWithMaybe :: Reflex t => (a -> b -> Maybe c) -> Behavior t a -> Event t b -> Event t c
668attachWithMaybe :: Reflex t => (a -> b -> Maybe c) -> Behavior t a -> Event t b -> Event t c
653attachWithMaybe f b e = flip push e $ \o -> (`f` o) <$> sample b
669attachWithMaybe f b e = flip push e $ \o -> (`f` o) <$> sample b
655−-- | Create a new 'Event' that only occurs only once, on the first occurence of
656−-- the supplied 'Event'.
657−headE :: (Reflex t, MonadHold t m, MonadFix m) => Event t a -> m (Event t a)
659− rec be <- hold e $ fmapCheap (const never) e'
663-- | Create a new 'Event' that occurs on all but the first occurence of the
671-- | Create a new 'Event' that occurs on all but the first occurence of the
664-- supplied 'Event'.
672-- supplied 'Event'.
665tailE :: (Reflex t, MonadHold t m, MonadFix m) => Event t a -> m (Event t a)
673tailE :: (Reflex t, MonadHold t m, MonadFix m) => Event t a -> m (Event t a)