@@ -688,7 +688,7 @@ leftmost = mergeWith const
688688-- time.
689689mergeList :: Reflex t => [Event t a] -> Event t (NonEmpty a)
690690mergeList [] = never
691−mergeList es = mergeWithCheap' (:|[]) (<>) es
691+mergeList es = mergeWithFoldCheap' id es
692692
693693unsafeMapIncremental :: (Reflex t, Patch p, Patch p') => (PatchTarget p -> PatchTarget p') -> (p -> p') -> Incremental t p -> Incremental t p'
694694unsafeMapIncremental f g a = unsafeBuildIncremental (fmap f $ sample $ currentIncremental a) $ g <$> updatedIncremental a
@@ -983,11 +983,16 @@ mergeWithCheap = mergeWithCheap' id
983983
984984{-# INLINE mergeWithCheap' #-}
985985mergeWithCheap' :: Reflex t => (a -> b) -> (b -> b -> b) -> [Event t a] -> Event t b
986−mergeWithCheap' f g es = fmapCheap (Prelude.foldl1 g . map (\(Const2 _ :=> Identity v) -> f v) . DMap.toList)
987− . merge
988− . DMap.fromDistinctAscList
989− . map (\(k, v) -> Const2 k :=> v)
990− $ zip [0 :: Int ..] es
986+mergeWithCheap' f g = mergeWithFoldCheap' $ foldl1 g . fmap f
987+
988+{-# INLINE mergeWithFoldCheap' #-}
989+mergeWithFoldCheap' :: Reflex t => (NonEmpty a -> b) -> [Event t a] -> Event t b
990+mergeWithFoldCheap' f es =
991+ fmapCheap (f . (\(h : t) -> h :| t) . map (\(Const2 _ :=> Identity v) -> v) . DMap.toList)
992+ . merge
993+ . DMap.fromDistinctAscList
994+ . map (\(k, v) -> Const2 k :=> v)
995+ $ zip [0 :: Int ..] es
991996
992997--------------------------------------------------------------------------------
993998-- Deprecated functions