on develop help sign in
A couple more tweaks
1647b9cRyan Trinkle
src/Data/Functor/Misc.hs−1
@@ -54,7 +54,6 @@ import Data.GADT.Compare
54import Data.GADT.Show
54import Data.GADT.Show
55import Data.Map (Map)
55import Data.Map (Map)
56import qualified Data.Map as Map
56import qualified Data.Map as Map
57−import Data.Maybe
58import Data.Some (Some)
57import Data.Some (Some)
59import qualified Data.Some as Some
58import qualified Data.Some as Some
60import Data.These
59import Data.These
src/Reflex/Patch/DMap.hs+5−1
@@ -20,7 +20,7 @@ import Data.Some (Some)
20
20
21-- | A set of changes to a 'DMap'. Any element may be inserted/updated or
21-- | A set of changes to a 'DMap'. Any element may be inserted/updated or
22-- deleted.
22-- deleted.
23−newtype PatchDMap k v = PatchDMap (DMap k (ComposeMaybe v))
23+newtype PatchDMap k v = PatchDMap { unPatchDMap :: DMap k (ComposeMaybe v) }
24
24
25deriving instance GCompare k => Semigroup (PatchDMap k v)
25deriving instance GCompare k => Semigroup (PatchDMap k v)
26
26
@@ -55,3 +55,7 @@ const2PatchDMapWith f (PatchMap p) = PatchDMap $ DMap.fromDistinctAscList $ g <$
55 where g :: (k, Maybe v) -> DSum (Const2 k a) (ComposeMaybe f)
55 where g :: (k, Maybe v) -> DSum (Const2 k a) (ComposeMaybe f)
56 g (k, e) = Const2 k :=> ComposeMaybe (f <$> e)
56 g (k, e) = Const2 k :=> ComposeMaybe (f <$> e)
57
57
58+-- | Get the values that will be deleted if the given patch is applied to the
59+-- given 'DMap'. Includes values that will be replaced.
60+getDeletions :: GCompare k => PatchDMap k v -> DMap k v' -> DMap k v'
61+getDeletions (PatchDMap p) m = DMap.intersectionWithKey (\_ v _ -> v) m p
src/Reflex/Patch/DMapWithMove.hs+6−7
@@ -22,6 +22,7 @@ import qualified Data.Dependent.Map as DMap
22import Data.Dependent.Sum (ShowTag (..), EqTag (..))
22import Data.Dependent.Sum (ShowTag (..), EqTag (..))
23import Data.Functor.Constant
23import Data.Functor.Constant
24import Data.Functor.Misc
24import Data.Functor.Misc
25+import Data.Functor.Product
25import Data.GADT.Compare (GEq (..))
26import Data.GADT.Compare (GEq (..))
26import Data.GADT.Show (GShow (..))
27import Data.GADT.Show (GShow (..))
27import qualified Data.Map as Map
28import qualified Data.Map as Map
@@ -266,10 +267,8 @@ instance GCompare k => Patch (PatchDMapWithMove k v) where
266 From_Delete -> Just $ Constant ()
267 From_Delete -> Just $ Constant ()
267 _ -> Nothing
268 _ -> Nothing
268
269
269−-- | Get the values that will be deleted if the given patch is applied to the
270+-- | Get the values that will be deleted or moved if the given patch is applied
270−-- given 'DMap'
271+-- to the given 'DMap'.
271−getDeletions :: GCompare k => PatchDMapWithMove k v -> DMap k v' -> DMap k v'
272+getDeletionsAndMoves :: GCompare k => PatchDMapWithMove k v -> DMap k v' -> DMap k (Product v' (ComposeMaybe k))
272−getDeletions (PatchDMapWithMove p) m = DMap.mapMaybeWithKey (\_ -> getComposeMaybe) $ DMap.intersectionWithKey f p m
273+getDeletionsAndMoves (PatchDMapWithMove p) m = DMap.intersectionWithKey f m p
273− where f _ ni v = ComposeMaybe $ case getComposeMaybe $ _nodeInfo_to ni of
274+ where f _ v ni = Pair v $ _nodeInfo_to ni
274− Just _ -> Nothing
275− Nothing -> Just v