on develop help sign in
Add .gitignore for cabal; Add unlessE function
5ae2b58Lennart Spitzner
.gitignore+2
@@ -1,4 +1,6 @@
1dist
1dist
2+cabal.sandbox.config
3+.cabal-sandbox/
2cabal-dev
4cabal-dev
3*.o
5*.o
4*.hi
6*.hi
src/Reflex/Class.hs+13
@@ -34,6 +34,7 @@ module Reflex.Class
34 , mergeMap
34 , mergeMap
35 , mergeList
35 , mergeList
36 , mergeWith
36 , mergeWith
37+ , unlessE
37 -- ** Breaking up 'Event's
38 -- ** Breaking up 'Event's
38 , splitE
39 , splitE
39 , fanEither
40 , fanEither
@@ -703,6 +704,18 @@ distributeListOverDyn = distributeListOverDynWith id
703distributeListOverDynWith :: Reflex t => ([a] -> b) -> [Dynamic t a] -> Dynamic t b
704distributeListOverDynWith :: Reflex t => ([a] -> b) -> [Dynamic t a] -> Dynamic t b
704distributeListOverDynWith f = fmap (f . map (\(Const2 _ :=> Identity v) -> v) . DMap.toList) . distributeDMapOverDynPure . DMap.fromList . map (\(k, v) -> Const2 k :=> v) . zip [0 :: Int ..]
705distributeListOverDynWith f = fmap (f . map (\(Const2 _ :=> Identity v) -> v) . DMap.toList) . distributeDMapOverDynPure . DMap.fromList . map (\(k, v) -> Const2 k :=> v) . zip [0 :: Int ..]
705
706
707+-- | Create a new 'Event' that occurs when the first supplied 'Event' occurs
708+-- unless the second supplied 'Event' occurs simultaneously.
709+unlessE :: Reflex t => Event t a -> Event t b -> Event t a
710+unlessE ea eb =
711+ fmapMaybe dmapper
712+ $ merge
713+ $ DMap.fromList [LeftTag DMap.:=> ea, RightTag DMap.:=> eb]
714+ where
715+ dmapper m = case (DMap.lookup LeftTag m, DMap.lookup RightTag m) of
716+ (Just (Identity a), Nothing) -> Just a
717+ _ -> Nothing
718+
706
719
707--------------------------------------------------------------------------------
720--------------------------------------------------------------------------------
708-- Accumulator
721-- Accumulator
test/Reflex/Test/Micro.hs+5
@@ -242,6 +242,11 @@ testCases =
242 f <- fanMap . fmap toMap <$> events1
242 f <- fanMap . fmap toMap <$> events1
243 return $ toList <$> mergeList [ select f (Const2 'b'), select f (Const2 'b'), select f (Const2 'e'), select f (Const2 'e') ]
243 return $ toList <$> mergeList [ select f (Const2 'b'), select f (Const2 'b'), select f (Const2 'e'), select f (Const2 'e') ]
244
244
245+ , testE "unlessE" $ do
246+ e1 <- events1
247+ e2 <- events2
248+ return $ e1 `unlessE ` e2
249+
245 ] where
250 ] where
246
251
247 events1, events2, events3 :: TestPlan t m => m (Event t String)
252 events1, events2, events3 :: TestPlan t m => m (Event t String)