Safe Haskell | Safe-Inferred |
---|---|
Language | Haskell2010 |
See Assoc
.
Synopsis
- data Assoc x a
- assocFwd :: Assoc x a -> IntLikeMap x a
- assocBwd :: Assoc x a -> HashMap a x
- assocEquiv :: Assoc x a -> EquivFind x
- assocSize :: Assoc x a -> Int
- assocNew :: Assoc x a
- assocSingleton :: (Coercible x Int, Hashable a) => x -> a -> Assoc x a
- data AssocInsertRes x
- assocInsertInc :: (Coercible x Int, Ord x, Eq a, Hashable a) => x -> a -> Assoc x a -> ((x, AssocInsertRes x), Assoc x a)
- assocInsert :: (Coercible x Int, Ord x, Eq a, Hashable a) => x -> a -> State (Assoc x a) (x, AssocInsertRes x)
- assocFromList :: (Coercible x Int, Ord x, Eq a, Hashable a) => [(x, a)] -> Assoc x a
- assocToList :: Coercible x Int => Assoc x a -> [(x, a)]
- assocMember :: Coercible x Int => x -> Assoc x a -> Bool
- assocLookupByKey :: Coercible x Int => x -> Assoc x a -> Maybe a
- assocPartialLookupByKey :: Coercible x Int => x -> Assoc x a -> a
- assocLookupByValue :: (Eq a, Hashable a) => a -> Assoc x a -> Maybe x
- assocPartialLookupByValue :: (Eq a, Hashable a) => a -> Assoc x a -> x
- assocLookupRoot :: Coercible x Int => x -> Assoc x a -> x
- assocRoots :: Coercible x Int => Assoc x a -> [x]
- assocLeaves :: Coercible x Int => Assoc x a -> [x]
- assocMembers :: Coercible x Int => Assoc x a -> [x]
- assocCanCompact :: Assoc x a -> Bool
- assocCompactInc :: Coercible x Int => Assoc x a -> (IntLikeMap x x, Assoc x a)
- assocCompact :: Coercible x Int => State (Assoc x a) (IntLikeMap x x)
- assocRemoveAllInc :: (Coercible x Int, Eq a, Hashable a) => [x] -> Assoc x a -> Assoc x a
- assocRemoveAll :: (Coercible x Int, Eq a, Hashable a) => [x] -> State (Assoc x a) ()
- assocUnion :: (Coercible x Int, Ord x, Eq a, Hashable a) => Assoc x a -> Assoc x a -> Assoc x a
- assocFootprint :: (Coercible x Int, Eq a, Hashable a) => a -> Assoc x a -> IntLikeSet x
Documentation
Associates keys and values in such a way that inserting duplicate values induces equivalences on their keys. Invariant: fwd and bwd maps contain only root keys.
Instances
Generic (Assoc x a) Source # | |
(Show a, Show x) => Show (Assoc x a) Source # | |
(NFData a, NFData x) => NFData (Assoc x a) Source # | |
Defined in Overeasy.Assoc | |
(Eq a, Eq x) => Eq (Assoc x a) Source # | |
type Rep (Assoc x a) Source # | |
Defined in Overeasy.Assoc type Rep (Assoc x a) = D1 ('MetaData "Assoc" "Overeasy.Assoc" "overeasy-0.2.0-7Shit7pE5Ru2Ny0HoLxUG4" 'False) (C1 ('MetaCons "Assoc" 'PrefixI 'True) (S1 ('MetaSel ('Just "assocFwd") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (IntLikeMap x a)) :*: (S1 ('MetaSel ('Just "assocBwd") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (HashMap a x)) :*: S1 ('MetaSel ('Just "assocEquiv") 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 (EquivFind x))))) |
assocFwd :: Assoc x a -> IntLikeMap x a Source #
Map from id to element
assocEquiv :: Assoc x a -> EquivFind x Source #
Equivalence classes of ids
assocSingleton :: (Coercible x Int, Hashable a) => x -> a -> Assoc x a Source #
Creates a singleton assoc
data AssocInsertRes x Source #
The result of inserting into the assoc, if you're interested.
AssocInsertResUnchanged | |
AssocInsertResCreated | |
AssocInsertResUpdated | |
AssocInsertResMerged !(IntLikeSet x) |
Instances
Show (AssocInsertRes x) Source # | |
Defined in Overeasy.Assoc showsPrec :: Int -> AssocInsertRes x -> ShowS # show :: AssocInsertRes x -> String # showList :: [AssocInsertRes x] -> ShowS # | |
Eq (AssocInsertRes x) Source # | |
Defined in Overeasy.Assoc (==) :: AssocInsertRes x -> AssocInsertRes x -> Bool # (/=) :: AssocInsertRes x -> AssocInsertRes x -> Bool # |
assocInsertInc :: (Coercible x Int, Ord x, Eq a, Hashable a) => x -> a -> Assoc x a -> ((x, AssocInsertRes x), Assoc x a) Source #
Insert into the assoc (raw version)
assocInsert :: (Coercible x Int, Ord x, Eq a, Hashable a) => x -> a -> State (Assoc x a) (x, AssocInsertRes x) Source #
Insert into the assoc (the state version)
assocFromList :: (Coercible x Int, Ord x, Eq a, Hashable a) => [(x, a)] -> Assoc x a Source #
Build an assoc from a list of pairs
assocToList :: Coercible x Int => Assoc x a -> [(x, a)] Source #
Turn an assoc into a list of pairs (NOTE - emits only root keys!)
assocPartialLookupByValue :: (Eq a, Hashable a) => a -> Assoc x a -> x Source #
PARTIAL backward lookup
assocLookupRoot :: Coercible x Int => x -> Assoc x a -> x Source #
Finds the root for the given key (id if not found)
assocRoots :: Coercible x Int => Assoc x a -> [x] Source #
List all root (live, non-compactible) keys
assocCanCompact :: Assoc x a -> Bool Source #
Are there dead keys in the equiv from assocInsert
?
assocCompactInc :: Coercible x Int => Assoc x a -> (IntLikeMap x x, Assoc x a) Source #
Removes all dead keys in the equiv (raw version).
assocCompact :: Coercible x Int => State (Assoc x a) (IntLikeMap x x) Source #
Removes all dead keys in the equiv (state version). Returns map of dead leaf node -> live root node
assocRemoveAllInc :: (Coercible x Int, Eq a, Hashable a) => [x] -> Assoc x a -> Assoc x a Source #
Removes the given keys from the assoc (raw version)
assocRemoveAll :: (Coercible x Int, Eq a, Hashable a) => [x] -> State (Assoc x a) () Source #
Removes the given keys from the assoc (state version). Values will only be removed from the assoc if the key is a singleton root. If a key is not found, it is simply ignored.
assocUnion :: (Coercible x Int, Ord x, Eq a, Hashable a) => Assoc x a -> Assoc x a -> Assoc x a Source #
Join two assocs (uses the first as the base)
assocFootprint :: (Coercible x Int, Eq a, Hashable a) => a -> Assoc x a -> IntLikeSet x Source #
Returns the footprint of the given value - all keys that map to it (root and leaf)