on develop help sign in
Merge pull request #45 from DiegoNolan/develop

Add apDyn to enable applicative style programming on Dynamic

commit57be32f08250c52ec081e0262f4bf0727904ea15 authorRyan Trinkle <ryan.trinkle@gmail.com> dateSun 6 Mar 2016, 21:19 (11 years ago) parent77b2a5022cf82f
1 file changed+16
src/Reflex/Dynamic.hs+16
src/Reflex/Dynamic.hs+16
@@ -20,6 +20,7 @@ module Reflex.Dynamic ( Dynamic -- Abstract so we can preserve the law that the
2020 , foldDynMaybe
2121 , foldDynMaybeM
2222 , combineDyn
23+ , apDyn
2324 , collectDyn
2425 , mconcatDyn
2526 , distributeDMapOverDyn
@@ -271,6 +272,21 @@ combineDyn f da db = do
271272 let bc :: Behavior t c = pull $ sample =<< sample bbc
272273 return $ Dynamic bc ec
273274
275+-- | A psuedo applicative version of ap for 'Dynamic'. Example useage:
276+--
277+-- > do
278+-- > person <- Person `mapDyn` dynFirstName
279+-- > `apDyn` dynListName
280+-- > `apDyn` dynAge
281+-- > `apDyn` dynAddress
282+apDyn :: forall t m a b. (Reflex t, MonadHold t m)
283+ => m (Dynamic t (a -> b))
284+ -> Dynamic t a
285+ -> m (Dynamic t b)
286+apDyn m a = do
287+ r <- m
288+ combineDyn (\f c -> f c) r a
289+
274290{-
275291tagInnerDyn :: Reflex t => Event t (Dynamic t a) -> Event t a
276292tagInnerDyn e =