reflex-0.6.1: Higher-order Functional Reactive Programming

Reflex.Patch.MapWithMove

Description

Patches on Map that can insert, delete, and move values from one key to another

Synopsis

# Documentation

newtype PatchMapWithMove k v Source #

Patch a DMap with additions, deletions, and moves. Invariant: If key k1 is coming from From_Move k2, then key k2 should be going to Just k1, and vice versa. There should never be any unpaired From/To keys.

Constructors

 PatchMapWithMove (Map k (NodeInfo k v))
Instances
 Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodsfmap :: (a -> b) -> PatchMapWithMove k a -> PatchMapWithMove k b #(<$) :: a -> PatchMapWithMove k b -> PatchMapWithMove k a # Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodsfold :: Monoid m => PatchMapWithMove k m -> m #foldMap :: Monoid m => (a -> m) -> PatchMapWithMove k a -> m #foldr :: (a -> b -> b) -> b -> PatchMapWithMove k a -> b #foldr' :: (a -> b -> b) -> b -> PatchMapWithMove k a -> b #foldl :: (b -> a -> b) -> b -> PatchMapWithMove k a -> b #foldl' :: (b -> a -> b) -> b -> PatchMapWithMove k a -> b #foldr1 :: (a -> a -> a) -> PatchMapWithMove k a -> a #foldl1 :: (a -> a -> a) -> PatchMapWithMove k a -> a #toList :: PatchMapWithMove k a -> [a] #null :: PatchMapWithMove k a -> Bool #length :: PatchMapWithMove k a -> Int #elem :: Eq a => a -> PatchMapWithMove k a -> Bool #maximum :: Ord a => PatchMapWithMove k a -> a #minimum :: Ord a => PatchMapWithMove k a -> a #sum :: Num a => PatchMapWithMove k a -> a #product :: Num a => PatchMapWithMove k a -> a # Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodstraverse :: Applicative f => (a -> f b) -> PatchMapWithMove k a -> f (PatchMapWithMove k b) #sequenceA :: Applicative f => PatchMapWithMove k (f a) -> f (PatchMapWithMove k a) #mapM :: Monad m => (a -> m b) -> PatchMapWithMove k a -> m (PatchMapWithMove k b) #sequence :: Monad m => PatchMapWithMove k (m a) -> m (PatchMapWithMove k a) # (Eq k, Eq v) => Eq (PatchMapWithMove k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methods(==) :: PatchMapWithMove k v -> PatchMapWithMove k v -> Bool #(/=) :: PatchMapWithMove k v -> PatchMapWithMove k v -> Bool # (Ord k, Ord v) => Ord (PatchMapWithMove k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodscompare :: PatchMapWithMove k v -> PatchMapWithMove k v -> Ordering #(<) :: PatchMapWithMove k v -> PatchMapWithMove k v -> Bool #(<=) :: PatchMapWithMove k v -> PatchMapWithMove k v -> Bool #(>) :: PatchMapWithMove k v -> PatchMapWithMove k v -> Bool #(>=) :: PatchMapWithMove k v -> PatchMapWithMove k v -> Bool #max :: PatchMapWithMove k v -> PatchMapWithMove k v -> PatchMapWithMove k v #min :: PatchMapWithMove k v -> PatchMapWithMove k v -> PatchMapWithMove k v # (Show k, Show v) => Show (PatchMapWithMove k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove MethodsshowsPrec :: Int -> PatchMapWithMove k v -> ShowS #show :: PatchMapWithMove k v -> String #showList :: [PatchMapWithMove k v] -> ShowS # Ord k => Semigroup (PatchMapWithMove k v) Source # Compose patches having the same effect as applying the patches in turn: applyAlways (p <> q) == applyAlways p . applyAlways q Instance detailsDefined in Reflex.Patch.MapWithMove Methods(<>) :: PatchMapWithMove k v -> PatchMapWithMove k v -> PatchMapWithMove k v #sconcat :: NonEmpty (PatchMapWithMove k v) -> PatchMapWithMove k v #stimes :: Integral b => b -> PatchMapWithMove k v -> PatchMapWithMove k v # Ord k => Monoid (PatchMapWithMove k v) Source # Compose patches having the same effect as applying the patches in turn: applyAlways (p <> q) == applyAlways p . applyAlways q Instance detailsDefined in Reflex.Patch.MapWithMove Methodsmappend :: PatchMapWithMove k v -> PatchMapWithMove k v -> PatchMapWithMove k v #mconcat :: [PatchMapWithMove k v] -> PatchMapWithMove k v # Ord k => Patch (PatchMapWithMove k v) Source # Apply the insertions, deletions, and moves to a given Map Instance detailsDefined in Reflex.Patch.MapWithMove Associated Typestype PatchTarget (PatchMapWithMove k v) :: * Source # Methodsapply :: PatchMapWithMove k v -> PatchTarget (PatchMapWithMove k v) -> Maybe (PatchTarget (PatchMapWithMove k v)) Source # type PatchTarget (PatchMapWithMove k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove type PatchTarget (PatchMapWithMove k v) = Map k v data NodeInfo k v Source # Holds the information about each key: where its new value should come from, and where its old value should go to Constructors  NodeInfo Fields_nodeInfo_from :: !(From k v)Where do we get the new value for this key?_nodeInfo_to :: !(To k)If the old value is being kept (i.e. moved rather than deleted or replaced), where is it going? Instances  Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodsfmap :: (a -> b) -> NodeInfo k a -> NodeInfo k b #(<$) :: a -> NodeInfo k b -> NodeInfo k a # Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodsfold :: Monoid m => NodeInfo k m -> m #foldMap :: Monoid m => (a -> m) -> NodeInfo k a -> m #foldr :: (a -> b -> b) -> b -> NodeInfo k a -> b #foldr' :: (a -> b -> b) -> b -> NodeInfo k a -> b #foldl :: (b -> a -> b) -> b -> NodeInfo k a -> b #foldl' :: (b -> a -> b) -> b -> NodeInfo k a -> b #foldr1 :: (a -> a -> a) -> NodeInfo k a -> a #foldl1 :: (a -> a -> a) -> NodeInfo k a -> a #toList :: NodeInfo k a -> [a] #null :: NodeInfo k a -> Bool #length :: NodeInfo k a -> Int #elem :: Eq a => a -> NodeInfo k a -> Bool #maximum :: Ord a => NodeInfo k a -> a #minimum :: Ord a => NodeInfo k a -> a #sum :: Num a => NodeInfo k a -> a #product :: Num a => NodeInfo k a -> a # Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodstraverse :: Applicative f => (a -> f b) -> NodeInfo k a -> f (NodeInfo k b) #sequenceA :: Applicative f => NodeInfo k (f a) -> f (NodeInfo k a) #mapM :: Monad m => (a -> m b) -> NodeInfo k a -> m (NodeInfo k b) #sequence :: Monad m => NodeInfo k (m a) -> m (NodeInfo k a) # (Eq v, Eq k) => Eq (NodeInfo k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methods(==) :: NodeInfo k v -> NodeInfo k v -> Bool #(/=) :: NodeInfo k v -> NodeInfo k v -> Bool # (Ord v, Ord k) => Ord (NodeInfo k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodscompare :: NodeInfo k v -> NodeInfo k v -> Ordering #(<) :: NodeInfo k v -> NodeInfo k v -> Bool #(<=) :: NodeInfo k v -> NodeInfo k v -> Bool #(>) :: NodeInfo k v -> NodeInfo k v -> Bool #(>=) :: NodeInfo k v -> NodeInfo k v -> Bool #max :: NodeInfo k v -> NodeInfo k v -> NodeInfo k v #min :: NodeInfo k v -> NodeInfo k v -> NodeInfo k v # (Read v, Read k) => Read (NodeInfo k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove MethodsreadsPrec :: Int -> ReadS (NodeInfo k v) #readList :: ReadS [NodeInfo k v] #readPrec :: ReadPrec (NodeInfo k v) # (Show v, Show k) => Show (NodeInfo k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove MethodsshowsPrec :: Int -> NodeInfo k v -> ShowS #show :: NodeInfo k v -> String #showList :: [NodeInfo k v] -> ShowS #

data From k v Source #

Describe how a key's new value should be produced

Constructors

 From_Insert v Insert the given value here From_Delete Delete the existing value, if any, from here From_Move !k Move the value here from the given key
Instances
 Functor (From k) Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodsfmap :: (a -> b) -> From k a -> From k b #(<$) :: a -> From k b -> From k a # Foldable (From k) Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodsfold :: Monoid m => From k m -> m #foldMap :: Monoid m => (a -> m) -> From k a -> m #foldr :: (a -> b -> b) -> b -> From k a -> b #foldr' :: (a -> b -> b) -> b -> From k a -> b #foldl :: (b -> a -> b) -> b -> From k a -> b #foldl' :: (b -> a -> b) -> b -> From k a -> b #foldr1 :: (a -> a -> a) -> From k a -> a #foldl1 :: (a -> a -> a) -> From k a -> a #toList :: From k a -> [a] #null :: From k a -> Bool #length :: From k a -> Int #elem :: Eq a => a -> From k a -> Bool #maximum :: Ord a => From k a -> a #minimum :: Ord a => From k a -> a #sum :: Num a => From k a -> a #product :: Num a => From k a -> a # Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodstraverse :: Applicative f => (a -> f b) -> From k a -> f (From k b) #sequenceA :: Applicative f => From k (f a) -> f (From k a) #mapM :: Monad m => (a -> m b) -> From k a -> m (From k b) #sequence :: Monad m => From k (m a) -> m (From k a) # (Eq v, Eq k) => Eq (From k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methods(==) :: From k v -> From k v -> Bool #(/=) :: From k v -> From k v -> Bool # (Ord v, Ord k) => Ord (From k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove Methodscompare :: From k v -> From k v -> Ordering #(<) :: From k v -> From k v -> Bool #(<=) :: From k v -> From k v -> Bool #(>) :: From k v -> From k v -> Bool #(>=) :: From k v -> From k v -> Bool #max :: From k v -> From k v -> From k v #min :: From k v -> From k v -> From k v # (Read v, Read k) => Read (From k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove MethodsreadsPrec :: Int -> ReadS (From k v) #readList :: ReadS [From k v] #readPrec :: ReadPrec (From k v) #readListPrec :: ReadPrec [From k v] # (Show v, Show k) => Show (From k v) Source # Instance detailsDefined in Reflex.Patch.MapWithMove MethodsshowsPrec :: Int -> From k v -> ShowS #show :: From k v -> String #showList :: [From k v] -> ShowS # type To = Maybe Source # Describe where a key's old value will go. If this is Just, that means the key's old value will be moved to the given other key; if it is Nothing, that means it will be deleted. patchMapWithMove :: Ord k => Map k (NodeInfo k v) -> Maybe (PatchMapWithMove k v) Source # Create a PatchMapWithMove, validating it Create a PatchMapWithMove that inserts everything in the given Map unPatchMapWithMove :: PatchMapWithMove k v -> Map k (NodeInfo k v) Source # Extract the internal representation of the PatchMapWithMove insertMapKey :: k -> v -> PatchMapWithMove k v Source # Make a PatchMapWithMove k v which has the effect of inserting or updating a value v to the given key k, like insert. moveMapKey :: Ord k => k -> k -> PatchMapWithMove k v Source # Make a PatchMapWithMove k v which has the effect of moving the value from the first key k to the second key k, equivalent to:  delete src (maybe map (insert dst) (Map.lookup src map))  swapMapKey :: Ord k => k -> k -> PatchMapWithMove k v Source # Make a PatchMapWithMove k v which has the effect of swapping two keys in the mapping, equivalent to:  let aMay = Map.lookup a map bMay = Map.lookup b map in maybe id (Map.insert a) (bMay mplus aMay) . maybe id (Map.insert b) (aMay mplus bMay) . Map.delete a . Map.delete b$ map


deleteMapKey :: k -> PatchMapWithMove k v Source #

Make a PatchMapWithMove k v which has the effect of deleting a key in the mapping, equivalent to delete.

unsafePatchMapWithMove :: Map k (NodeInfo k v) -> PatchMapWithMove k v Source #

Wrap a Map k (NodeInfo k v) representing patch changes into a PatchMapWithMove k v, without checking any invariants.

Warning: when using this function, you must ensure that the invariants of PatchMapWithMove are preserved; they will not be checked.

Returns all the new elements that will be added to the Map.

Return a Map k v with all the inserts/updates from the given PatchMapWithMove k v.

patchThatSortsMapWith :: Ord k => (v -> v -> Ordering) -> Map k v -> PatchMapWithMove k v Source #

Create a PatchMapWithMove that, if applied to the given Map, will sort its values using the given ordering function. The set keys of the Map is not changed.

patchThatChangesAndSortsMapWith :: forall k v. (Ord k, Ord v) => (v -> v -> Ordering) -> Map k v -> Map k v -> PatchMapWithMove k v Source #

Create a PatchMapWithMove that, if applied to the first Map provided, will produce a Map with the same values as the second Map but with the values sorted with the given ordering function.

patchThatChangesMap :: (Ord k, Ord v) => Map k v -> Map k v -> PatchMapWithMove k v Source #

Create a PatchMapWithMove that, if applied to the first Map provided, will produce the second Map.

nodeInfoMapFrom :: (From k v -> From k v) -> NodeInfo k v -> NodeInfo k v Source #

Change the From value of a NodeInfo

nodeInfoMapMFrom :: Functor f => (From k v -> f (From k v)) -> NodeInfo k v -> f (NodeInfo k v) Source #

Change the From value of a NodeInfo, using a Functor (or Applicative, Monad, etc.) action to get the new value

nodeInfoSetTo :: To k -> NodeInfo k v -> NodeInfo k v Source #

Set the To field of a NodeInfo

data Fixup k v Source #

Helper data structure used for composing patches using the monoid instance.

Constructors

 Fixup_Delete Fixup_Update (These (From k v) (To k))