@@ -98,6 +98,10 @@ Since MonadHold depends on MonadSample, any [S] function also runs in [H] contex
98[ ] <> :: Monoid a => Behavior a -> Behavior a -> Behavior a
98[ ] <> :: Monoid a => Behavior a -> Behavior a -> Behavior a
99-- ... plus many more due to typeclass membership
99-- ... plus many more due to typeclass membership
101+-- Combine multiple behaviors via applicative instance
102+[ ] ffor2 :: Behavior a -> Behavior b -> (a -> b -> c) -> Behavior c
103+[ ] ffor3 :: Behavior a -> Behavior b -> Behavior c -> (a -> b -> c -> d) -> Behavior d
101-- Behavior to Behavior by sampling current values
105-- Behavior to Behavior by sampling current values
102[S] sample :: Behavior a -> m a
106[S] sample :: Behavior a -> m a
103[ ] pull :: m a -> Behavior a
107[ ] pull :: m a -> Behavior a
@@ -135,6 +139,10 @@ Since MonadHold depends on MonadSample, any [S] function also runs in [H] contex
135[ ] >>= :: Dynamic a -> (a -> Dynamic b) -> Dynamic b
139[ ] >>= :: Dynamic a -> (a -> Dynamic b) -> Dynamic b
136[ ] zipDynWith :: (a -> b -> c) -> Dynamic a -> Dynamic b -> Dynamic c
140[ ] zipDynWith :: (a -> b -> c) -> Dynamic a -> Dynamic b -> Dynamic c
142+-- Combine multiple dynamics via applicative instance
143+[ ] ffor2 :: Dynamic a -> Dynamic b -> (a -> b -> c) -> Dynamic c
144+[ ] ffor3 :: Dynamic a -> Dynamic b -> Dynamic c -> (a -> b -> c -> d) -> Dynamic d
138-- Efficient one-to-many fanout
146-- Efficient one-to-many fanout
139[ ] demux :: Ord k => Dynamic k -> Demux k
147[ ] demux :: Ord k => Dynamic k -> Demux k
140[ ] demuxed :: Eq k => Demux k -> k -> Dynamic Bool
148[ ] demuxed :: Eq k => Demux k -> k -> Dynamic Bool