@@ -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 =