h*      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ 0.0.1.9  2022@2025 Jonathan Knowles Apache-2.0 Safe-Inferred(/ monoidmap;Models a total relation from unique keys to sets of values. monoidmap?Constructs a multimap from a list of key to value set mappings.Removing empty sets from the input list does not affect the result: 3fromList D fromList . filter ((/= Set.empty) . snd) monoidmap;Converts a multimap to a list of key to value-set mappings.Removing empty sets from the output list does not affect the result: /toList D filter ((/= Set.empty) . snd) . toListThe resulting list can be used to reconstruct the original multimap: fromList . toList D id monoidmapConstructs an empty multimap. empty D fromList [] monoidmap6Returns the set of values associated with a given key. lookup k (fromList kvs) D foldMap snd (filter ((== k) . fst) kvs) monoidmap-Indicates whether or not a multimap is empty. 'null m D (D k. lookup k m == Set.empty) monoidmap1Indicates whether or not a multimap is non-empty. *nonNull m D (D k. lookup k m /= Set.empty) monoidmapReturns 7 iff. the given key is associated with a non-empty set. *nonNullKey k m D (lookup k m /= Set.empty) monoidmapReturns the set of keys that are associated with non-empty sets. $all (`nonNullKey` m) (nonNullKeys m)  monoidmap;Indicates how many keys are associated with non-empty sets. )nonNullCount m D Set.size (nonNullKeys m)  monoidmapIndicates whether or not the first map is a sub-map of the second. m1 `isSubmapOf` m2 D D k. (lookup k m1 `Set.isSubsetOf` lookup k m2)  monoidmap6Updates the set of values associated with a given key. lookup k1 (update k2 vs m) D if k1 == k2 then vs else lookup k1 m  monoidmapInserts values into the set of values associated with a given key. lookup k1 (insert k2 vs m) D if k1 == k2 then lookup k1 m `Set.union` vs else lookup k1 m  monoidmapRemoves values from the set of values associated with a given key. lookup k1 (remove k2 vs m) D if k1 == k2 then lookup k1 m `Set.difference` vs else lookup k1 m monoidmap$Computes the union of two multimaps.0Instances must satisfy the following properties: Idempotence  union m m D mIdentity +union empty m D m union m empty D m Commutativity union m1 m2 D union m2 m1 Associativity >union m1 (union m2 m3) D union (union m1 m2) m3 Containment 7m1 `isSubmapOf` union m1 m2 m2 `isSubmapOf` union m1 m2Distributivity lookup k (union m1 m2) D Set.union (lookup k m1) (lookup k m2) monoidmap+Computes the intersection of two multimaps.0Instances must satisfy the following properties: Idempotence intersection m m D mIdentity intersection empty m D empty intersection m empty D empty Commutativity 'intersection m1 m2 D intersection m2 m1 Associativity intersection m1 (intersection m2 m3) D intersection (intersection m1 m2) m3 Containment intersection m1 m2 `isSubmapOf` m1 intersection m1 m2 `isSubmapOf` m2Distributivity lookup k (intersection m1 m2) D Set.intersection (lookup k m1) (lookup k m2)         2022@2025 Jonathan Knowles Apache-2.0 Safe-Inferred(/5 2022@2025 Jonathan Knowles Apache-2.0 Safe-Inferred(/ 2022@2025 Jonathan Knowles Apache-2.0 Safe-Inferred(/% 2022@2025 Jonathan Knowles Apache-2.0 Safe-Inferred(/   2022@2025 Jonathan Knowles Apache-2.0 Safe-Inferred(/         2022@2025 Jonathan Knowles Apache-2.0 Safe-Inferred(/$%&'()*+,-./0123$%&'()*+,-./0123 2022@2025 Jonathan Knowles Apache-2.0 Safe-Inferred(/=LMNOPQRSTUVWXYZ[\]^_`abcLMNOPQRSTUVWXYZ[\]^_`abc 2022@2025 Jonathan Knowles Apache-2.0 Safe-Inferred(/wxyz{|}~wxyz{|}~      !"# $%&' ()*  +,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst  uv+wxyz{|}~1monoidmap-0.0.1.9-1jPMIRdE64SHViQ19i4xvQ-examplesExamples.MultiMap.Class%Examples.MultiMap.Instances.MultiMap1%Examples.MultiMap.Instances.MultiMap2%Examples.MultiMap.Instances.MultiMap3%Examples.MultiMap.Instances.MultiMap4Examples.MultiSetExamples.NestedMonoidMapExamples.RecoveredMap monoidmapExamples.MultiMapMultiMapfromListtoListemptylookupnullnonNull nonNullKey nonNullKeys nonNullCount isSubmapOfupdateinsertremoveunion intersection MultiMap1$fMultiMapMultiMap1kv $fEqMultiMap1$fShowMultiMap1 MultiMap2$fMultiMapMultiMap2kv $fEqMultiMap2$fShowMultiMap2 MultiMap3$fMultiMapMultiMap3kv $fEqMultiMap3$fShowMultiMap3 MultiMap4$fMultiMapMultiMap4kv $fEqMultiMap4$fShowMultiMap4member multiplicityroot cardinality dimensionheight isSubsetOf disjointUnionaddsubtract subtractMaybe$fShowMultiSet$fReadMultiSet $fEqMultiSet$fSemigroupMultiSet$fCommutativeMultiSet$fMonoidMultiSet$fMonoidNullMultiSet$fPositiveMonoidMultiSet$fLeftReductiveMultiSet$fLeftCancellativeMultiSet$fLeftGCDMonoidMultiSet#$fLeftDistributiveGCDMonoidMultiSet$fRightReductiveMultiSet$fRightCancellativeMultiSet$fRightGCDMonoidMultiSet$$fRightDistributiveGCDMonoidMultiSet$fReductiveMultiSet$fCancellativeMultiSet$fGCDMonoidMultiSet$fLCMMonoidMultiSet$fDistributiveGCDMonoidMultiSet$fDistributiveLCMMonoidMultiSet$fOverlappingGCDMonoidMultiSet$fMonusMultiSetNestedMonoidMap fromFlatList fromFlatMapfromNestedList fromNestedMap toFlatList toFlatMap toNestedList toNestedMapgetsetadjustnullifyintersectionWith unionWith isSubmapOfBydisjoint disjointBy$fEqNestedMonoidMap$fCancellativeNestedMonoidMap$fCommutativeNestedMonoidMap$fGCDMonoidNestedMonoidMap$fLCMMonoidNestedMonoidMap!$fLeftCancellativeNestedMonoidMap$fLeftGCDMonoidNestedMonoidMap$fLeftReductiveNestedMonoidMap$fMonoidNestedMonoidMap$fMonoidNullNestedMonoidMap$fMonusNestedMonoidMap%$fOverlappingGCDMonoidNestedMonoidMap$fPositiveMonoidNestedMonoidMap$fReductiveNestedMonoidMap"$fRightCancellativeNestedMonoidMap$fRightGCDMonoidNestedMonoidMap$fRightReductiveNestedMonoidMap$fSemigroupNestedMonoidMap$fShowNestedMonoidMapMap singletondeletekeysSetmap mapAccumL mapAccumRmapAccumLWithKeymapAccumRWithKey $fFunctorMap $fShowMap$fSemigroupMap$fEqMap $fNFDataMap $fMonoidMapghc-prim GHC.TypesTrue