-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Monoidal map type -- -- Monoidal map type with support for semigroup and monoid subclasses. @package monoidmap @version 0.0.2.0 -- | Provides the MultiMap class, which models a total relation from -- unique keys to sets of values. module Examples.MultiMap.Class -- | Models a total relation from unique keys to sets of values. class (Eq (m k v), Ord k, Ord v) => MultiMap m k v -- | Constructs a multimap from a list of key to value set mappings. -- -- Removing empty sets from the input list does not affect the result: -- --
--   fromList ≡ fromList . filter ((/= Set.empty) . snd)
--   
fromList :: MultiMap m k v => [(k, Set v)] -> m k v -- | 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 ≡ filter ((/= Set.empty) . snd) . toList
--   
-- -- The resulting list can be used to reconstruct the original multimap: -- --
--   fromList . toList ≡ id
--   
toList :: MultiMap m k v => m k v -> [(k, Set v)] -- | Constructs an empty multimap. -- --
--   empty ≡ fromList []
--   
empty :: MultiMap m k v => m k v -- | Returns the set of values associated with a given key. -- --
--   lookup k (fromList kvs) ≡ foldMap snd (filter ((== k) . fst) kvs)
--   
lookup :: MultiMap m k v => k -> m k v -> Set v -- | Indicates whether or not a multimap is empty. -- --
--   null m ≡ (∀ k. lookup k m == Set.empty)
--   
null :: MultiMap m k v => m k v -> Bool -- | Indicates whether or not a multimap is non-empty. -- --
--   nonNull m ≡ (∃ k. lookup k m /= Set.empty)
--   
nonNull :: MultiMap m k v => m k v -> Bool -- | Returns True iff. the given key is associated with a non-empty -- set. -- --
--   nonNullKey k m ≡ (lookup k m /= Set.empty)
--   
nonNullKey :: MultiMap m k v => k -> m k v -> Bool -- | Returns the set of keys that are associated with non-empty sets. -- --
--   all (`nonNullKey` m) (nonNullKeys m)
--   
nonNullKeys :: MultiMap m k v => m k v -> Set k -- | Indicates how many keys are associated with non-empty sets. -- --
--   nonNullCount m ≡ Set.size (nonNullKeys m)
--   
nonNullCount :: MultiMap m k v => m k v -> Int -- | Indicates whether or not the first map is a sub-map of the second. -- --
--   m1 `isSubmapOf` m2 ≡ ∀ k. (lookup k m1 `Set.isSubsetOf` lookup k m2)
--   
isSubmapOf :: MultiMap m k v => m k v -> m k v -> Bool -- | Updates the set of values associated with a given key. -- --
--   lookup k1 (update k2 vs m) ≡
--       if k1 == k2
--       then vs
--       else lookup k1 m
--   
update :: MultiMap m k v => k -> Set v -> m k v -> m k v -- | Inserts values into the set of values associated with a given key. -- --
--   lookup k1 (insert k2 vs m) ≡
--       if k1 == k2
--       then lookup k1 m `Set.union` vs
--       else lookup k1 m
--   
insert :: MultiMap m k v => k -> Set v -> m k v -> m k v -- | Removes values from the set of values associated with a given key. -- --
--   lookup k1 (remove k2 vs m) ≡
--       if k1 == k2
--       then lookup k1 m `Set.difference` vs
--       else lookup k1 m
--   
remove :: MultiMap m k v => k -> Set v -> m k v -> m k v -- | Computes the union of two multimaps. -- -- Instances must satisfy the following properties: -- -- Idempotence -- --
--   union m m ≡ m
--   
-- -- Identity -- --
--   union empty m     ≡ m
--   union m     empty ≡ m
--   
-- -- Commutativity -- --
--   union m1 m2 ≡ union m2 m1
--   
-- -- Associativity -- --
--   union        m1 (union m2  m3) ≡
--   union (union m1        m2) m3
--   
-- -- Containment -- --
--   m1 `isSubmapOf` union m1 m2
--   m2 `isSubmapOf` union m1 m2
--   
-- -- Distributivity -- --
--   lookup k (union m1 m2) ≡ Set.union (lookup k m1)
--                                      (lookup k m2)
--   
union :: MultiMap m k v => m k v -> m k v -> m k v -- | Computes the intersection of two multimaps. -- -- Instances must satisfy the following properties: -- -- Idempotence -- --
--   intersection m m ≡ m
--   
-- -- Identity -- --
--   intersection empty m     ≡ empty
--   intersection m     empty ≡ empty
--   
-- -- Commutativity -- --
--   intersection m1 m2 ≡ intersection m2 m1
--   
-- -- Associativity -- --
--   intersection               m1 (intersection m2  m3) ≡
--   intersection (intersection m1               m2) m3
--   
-- -- Containment -- --
--   intersection m1 m2 `isSubmapOf` m1
--   intersection m1 m2 `isSubmapOf` m2
--   
-- -- Distributivity -- --
--   lookup k (intersection m1 m2) ≡ Set.intersection (lookup k m1)
--                                                    (lookup k m2)
--   
intersection :: MultiMap m k v => m k v -> m k v -> m k v -- | An unlawful implementation of MultiMap, implemented in -- terms of Map and Set. -- -- This implementation has several subtle bugs. 💥 module Examples.MultiMap.Instances.MultiMap1 newtype MultiMap1 k v MultiMap :: Map k (Set v) -> MultiMap1 k v instance (GHC.Show.Show k, GHC.Show.Show v) => GHC.Show.Show (Examples.MultiMap.Instances.MultiMap1.MultiMap1 k v) instance (GHC.Classes.Eq k, GHC.Classes.Eq v) => GHC.Classes.Eq (Examples.MultiMap.Instances.MultiMap1.MultiMap1 k v) instance (GHC.Classes.Ord k, GHC.Classes.Ord v) => Examples.MultiMap.Class.MultiMap Examples.MultiMap.Instances.MultiMap1.MultiMap1 k v -- | A lawful implementation of MultiMap, implemented in -- terms of Map and Set. module Examples.MultiMap.Instances.MultiMap2 newtype MultiMap2 k v MultiMap :: Map k (Set v) -> MultiMap2 k v instance (GHC.Show.Show k, GHC.Show.Show v) => GHC.Show.Show (Examples.MultiMap.Instances.MultiMap2.MultiMap2 k v) instance (GHC.Classes.Eq k, GHC.Classes.Eq v) => GHC.Classes.Eq (Examples.MultiMap.Instances.MultiMap2.MultiMap2 k v) instance (GHC.Classes.Ord k, GHC.Classes.Ord v) => Examples.MultiMap.Class.MultiMap Examples.MultiMap.Instances.MultiMap2.MultiMap2 k v -- | A lawful implementation of MultiMap, implemented in -- terms of Map and NESet. module Examples.MultiMap.Instances.MultiMap3 newtype MultiMap3 k v MultiMap :: Map k (NESet v) -> MultiMap3 k v instance (GHC.Show.Show k, GHC.Show.Show v) => GHC.Show.Show (Examples.MultiMap.Instances.MultiMap3.MultiMap3 k v) instance (GHC.Classes.Eq k, GHC.Classes.Eq v) => GHC.Classes.Eq (Examples.MultiMap.Instances.MultiMap3.MultiMap3 k v) instance (GHC.Classes.Ord k, GHC.Classes.Ord v) => Examples.MultiMap.Class.MultiMap Examples.MultiMap.Instances.MultiMap3.MultiMap3 k v -- | A lawful implementation of MultiMap, implemented in -- terms of MonoidMap and Set. module Examples.MultiMap.Instances.MultiMap4 newtype MultiMap4 k v MultiMap :: MonoidMap k (Set v) -> MultiMap4 k v instance (GHC.Show.Show k, GHC.Show.Show v) => GHC.Show.Show (Examples.MultiMap.Instances.MultiMap4.MultiMap4 k v) instance (GHC.Classes.Eq k, GHC.Classes.Eq v) => GHC.Classes.Eq (Examples.MultiMap.Instances.MultiMap4.MultiMap4 k v) instance (GHC.Classes.Ord k, GHC.Classes.Ord v) => Examples.MultiMap.Class.MultiMap Examples.MultiMap.Instances.MultiMap4.MultiMap4 k v -- | Provides the MultiMap class, which models a total relation from -- unique keys to sets of values. -- --

Implementations

-- -- The following example implementations are provided: -- -- TODO: table module Examples.MultiMap -- | Models a total relation from unique keys to sets of values. class (Eq (m k v), Ord k, Ord v) => MultiMap m k v -- | Constructs a multimap from a list of key to value set mappings. -- -- Removing empty sets from the input list does not affect the result: -- --
--   fromList ≡ fromList . filter ((/= Set.empty) . snd)
--   
fromList :: MultiMap m k v => [(k, Set v)] -> m k v -- | 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 ≡ filter ((/= Set.empty) . snd) . toList
--   
-- -- The resulting list can be used to reconstruct the original multimap: -- --
--   fromList . toList ≡ id
--   
toList :: MultiMap m k v => m k v -> [(k, Set v)] -- | Constructs an empty multimap. -- --
--   empty ≡ fromList []
--   
empty :: MultiMap m k v => m k v -- | Returns the set of values associated with a given key. -- --
--   lookup k (fromList kvs) ≡ foldMap snd (filter ((== k) . fst) kvs)
--   
lookup :: MultiMap m k v => k -> m k v -> Set v -- | Indicates whether or not a multimap is empty. -- --
--   null m ≡ (∀ k. lookup k m == Set.empty)
--   
null :: MultiMap m k v => m k v -> Bool -- | Indicates whether or not a multimap is non-empty. -- --
--   nonNull m ≡ (∃ k. lookup k m /= Set.empty)
--   
nonNull :: MultiMap m k v => m k v -> Bool -- | Returns True iff. the given key is associated with a non-empty -- set. -- --
--   nonNullKey k m ≡ (lookup k m /= Set.empty)
--   
nonNullKey :: MultiMap m k v => k -> m k v -> Bool -- | Returns the set of keys that are associated with non-empty sets. -- --
--   all (`nonNullKey` m) (nonNullKeys m)
--   
nonNullKeys :: MultiMap m k v => m k v -> Set k -- | Indicates how many keys are associated with non-empty sets. -- --
--   nonNullCount m ≡ Set.size (nonNullKeys m)
--   
nonNullCount :: MultiMap m k v => m k v -> Int -- | Indicates whether or not the first map is a sub-map of the second. -- --
--   m1 `isSubmapOf` m2 ≡ ∀ k. (lookup k m1 `Set.isSubsetOf` lookup k m2)
--   
isSubmapOf :: MultiMap m k v => m k v -> m k v -> Bool -- | Updates the set of values associated with a given key. -- --
--   lookup k1 (update k2 vs m) ≡
--       if k1 == k2
--       then vs
--       else lookup k1 m
--   
update :: MultiMap m k v => k -> Set v -> m k v -> m k v -- | Inserts values into the set of values associated with a given key. -- --
--   lookup k1 (insert k2 vs m) ≡
--       if k1 == k2
--       then lookup k1 m `Set.union` vs
--       else lookup k1 m
--   
insert :: MultiMap m k v => k -> Set v -> m k v -> m k v -- | Removes values from the set of values associated with a given key. -- --
--   lookup k1 (remove k2 vs m) ≡
--       if k1 == k2
--       then lookup k1 m `Set.difference` vs
--       else lookup k1 m
--   
remove :: MultiMap m k v => k -> Set v -> m k v -> m k v -- | Computes the union of two multimaps. -- -- Instances must satisfy the following properties: -- -- Idempotence -- --
--   union m m ≡ m
--   
-- -- Identity -- --
--   union empty m     ≡ m
--   union m     empty ≡ m
--   
-- -- Commutativity -- --
--   union m1 m2 ≡ union m2 m1
--   
-- -- Associativity -- --
--   union        m1 (union m2  m3) ≡
--   union (union m1        m2) m3
--   
-- -- Containment -- --
--   m1 `isSubmapOf` union m1 m2
--   m2 `isSubmapOf` union m1 m2
--   
-- -- Distributivity -- --
--   lookup k (union m1 m2) ≡ Set.union (lookup k m1)
--                                      (lookup k m2)
--   
union :: MultiMap m k v => m k v -> m k v -> m k v -- | Computes the intersection of two multimaps. -- -- Instances must satisfy the following properties: -- -- Idempotence -- --
--   intersection m m ≡ m
--   
-- -- Identity -- --
--   intersection empty m     ≡ empty
--   intersection m     empty ≡ empty
--   
-- -- Commutativity -- --
--   intersection m1 m2 ≡ intersection m2 m1
--   
-- -- Associativity -- --
--   intersection               m1 (intersection m2  m3) ≡
--   intersection (intersection m1               m2) m3
--   
-- -- Containment -- --
--   intersection m1 m2 `isSubmapOf` m1
--   intersection m1 m2 `isSubmapOf` m2
--   
-- -- Distributivity -- --
--   lookup k (intersection m1 m2) ≡ Set.intersection (lookup k m1)
--                                                    (lookup k m2)
--   
intersection :: MultiMap m k v => m k v -> m k v -> m k v -- | A multiset type, implemented in terms of MonoidMap. -- -- See: https://en.wikipedia.org/wiki/Multiset module Examples.MultiSet fromList :: Ord a => [(a, Natural)] -> MultiSet a toList :: MultiSet a -> [(a, Natural)] null :: MultiSet a -> Bool member :: Ord a => a -> MultiSet a -> Bool multiplicity :: Ord a => a -> MultiSet a -> Natural root :: Ord a => MultiSet a -> Set a cardinality :: MultiSet a -> Natural dimension :: MultiSet a -> Natural height :: Ord a => MultiSet a -> Natural isSubsetOf :: Ord a => MultiSet a -> MultiSet a -> Bool intersection :: Ord a => MultiSet a -> MultiSet a -> MultiSet a union :: Ord a => MultiSet a -> MultiSet a -> MultiSet a disjointUnion :: Ord a => MultiSet a -> MultiSet a -> MultiSet a add :: Ord a => MultiSet a -> MultiSet a -> MultiSet a subtract :: Ord a => MultiSet a -> MultiSet a -> MultiSet a subtractMaybe :: Ord a => MultiSet a -> MultiSet a -> Maybe (MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.Monus.Monus (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.Monus.OverlappingGCDMonoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.LCM.DistributiveLCMMonoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.GCD.DistributiveGCDMonoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.LCM.LCMMonoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.GCD.GCDMonoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Semigroup.Cancellative.Cancellative (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Semigroup.Cancellative.Reductive (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.GCD.RightDistributiveGCDMonoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.GCD.RightGCDMonoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Semigroup.Cancellative.RightCancellative (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Semigroup.Cancellative.RightReductive (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.GCD.LeftDistributiveGCDMonoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.GCD.LeftGCDMonoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Semigroup.Cancellative.LeftCancellative (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Semigroup.Cancellative.LeftReductive (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.Null.PositiveMonoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Monoid.Null.MonoidNull (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => GHC.Base.Monoid (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => Data.Semigroup.Commutative.Commutative (Examples.MultiSet.MultiSet a) instance GHC.Classes.Ord a => GHC.Base.Semigroup (Examples.MultiSet.MultiSet a) instance GHC.Classes.Eq a => GHC.Classes.Eq (Examples.MultiSet.MultiSet a) instance (GHC.Classes.Ord a, GHC.Read.Read a) => GHC.Read.Read (Examples.MultiSet.MultiSet a) instance GHC.Show.Show a => GHC.Show.Show (Examples.MultiSet.MultiSet a) -- | A nested map with compound keys, implemented in terms of -- MonoidMap. module Examples.NestedMonoidMap data NestedMonoidMap k1 k2 v fromFlatList :: (Ord k1, Ord k2, MonoidNull v) => [((k1, k2), v)] -> NestedMonoidMap k1 k2 v fromFlatMap :: (Ord k1, Ord k2, MonoidNull v) => Map (k1, k2) v -> NestedMonoidMap k1 k2 v fromNestedList :: (Ord k1, Ord k2, MonoidNull v) => [(k1, [(k2, v)])] -> NestedMonoidMap k1 k2 v fromNestedMap :: (Ord k2, MonoidNull v) => Map k1 (Map k2 v) -> NestedMonoidMap k1 k2 v toFlatList :: (Ord k1, Ord k2, MonoidNull v) => NestedMonoidMap k1 k2 v -> [((k1, k2), v)] toFlatMap :: (Ord k1, Ord k2, MonoidNull v) => NestedMonoidMap k1 k2 v -> Map (k1, k2) v toNestedList :: (Ord k1, Ord k2, MonoidNull v) => NestedMonoidMap k1 k2 v -> [(k1, [(k2, v)])] toNestedMap :: NestedMonoidMap k1 k2 v -> Map k1 (Map k2 v) get :: (Ord k1, Ord k2, MonoidNull v) => k1 -> k2 -> NestedMonoidMap k1 k2 v -> v set :: (Ord k1, Ord k2, MonoidNull v) => k1 -> k2 -> v -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v adjust :: (Ord k1, Ord k2, MonoidNull v) => (v -> v) -> k1 -> k2 -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v nullify :: (Ord k1, Ord k2, MonoidNull v) => k1 -> k2 -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v nonNullCount :: NestedMonoidMap k1 k2 v -> Int nonNullKey :: (Ord k1, Ord k2, MonoidNull v) => k1 -> k2 -> NestedMonoidMap k1 k2 v -> Bool nonNullKeys :: (Ord k1, Ord k2, MonoidNull v) => NestedMonoidMap k1 k2 v -> Set (k1, k2) intersection :: (Ord k1, Ord k2, MonoidNull v, GCDMonoid v) => NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v intersectionWith :: (Ord k1, Ord k2, MonoidNull v) => (v -> v -> v) -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v union :: (Ord k1, Ord k2, MonoidNull v, LCMMonoid v) => NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v unionWith :: (Ord k1, Ord k2, MonoidNull v) => (v -> v -> v) -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v isSubmapOf :: (Ord k1, Ord k2, MonoidNull v, Reductive v) => NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v -> Bool isSubmapOfBy :: (Ord k1, Ord k2, MonoidNull v, Reductive v) => (v -> v -> Bool) -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v -> Bool disjoint :: (Ord k1, Ord k2, MonoidNull v, GCDMonoid v) => NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v -> Bool disjointBy :: (Ord k1, Ord k2, MonoidNull v, GCDMonoid v) => (v -> v -> Bool) -> NestedMonoidMap k1 k2 v -> NestedMonoidMap k1 k2 v -> Bool instance (GHC.Show.Show k1, GHC.Show.Show k2, GHC.Show.Show v) => GHC.Show.Show (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v) => GHC.Base.Semigroup (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Semigroup.Cancellative.RightReductive v) => Data.Semigroup.Cancellative.RightReductive (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Monoid.GCD.RightGCDMonoid v) => Data.Monoid.GCD.RightGCDMonoid (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Semigroup.Cancellative.RightReductive v) => Data.Semigroup.Cancellative.RightCancellative (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Semigroup.Cancellative.Reductive v) => Data.Semigroup.Cancellative.Reductive (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v) => Data.Monoid.Null.PositiveMonoid (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Monoid.Monus.OverlappingGCDMonoid v) => Data.Monoid.Monus.OverlappingGCDMonoid (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Monoid.Monus.Monus v) => Data.Monoid.Monus.Monus (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v) => Data.Monoid.Null.MonoidNull (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v) => GHC.Base.Monoid (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Semigroup.Cancellative.LeftReductive v) => Data.Semigroup.Cancellative.LeftReductive (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Monoid.GCD.LeftGCDMonoid v) => Data.Monoid.GCD.LeftGCDMonoid (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Semigroup.Cancellative.LeftReductive v) => Data.Semigroup.Cancellative.LeftCancellative (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Monoid.LCM.LCMMonoid v) => Data.Monoid.LCM.LCMMonoid (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Monoid.GCD.GCDMonoid v) => Data.Monoid.GCD.GCDMonoid (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v) => Data.Semigroup.Commutative.Commutative (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Ord k1, GHC.Classes.Ord k2, Data.Monoid.Null.MonoidNull v, Data.Semigroup.Cancellative.Reductive v) => Data.Semigroup.Cancellative.Cancellative (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) instance (GHC.Classes.Eq k1, GHC.Classes.Eq k2, GHC.Classes.Eq v) => GHC.Classes.Eq (Examples.NestedMonoidMap.NestedMonoidMap k1 k2 v) -- | An ordinary left-biased map similar to Map, implemented in -- terms of MonoidMap. module Examples.RecoveredMap data Map k v empty :: Map k v singleton :: Ord k => k -> v -> Map k v fromList :: Ord k => [(k, v)] -> Map k v toList :: Map k v -> [(k, v)] delete :: Ord k => k -> Map k v -> Map k v insert :: Ord k => k -> v -> Map k v -> Map k v keysSet :: Map k v -> Set k lookup :: Ord k => k -> Map k v -> Maybe v member :: Ord k => k -> Map k v -> Bool map :: (v1 -> v2) -> Map k v1 -> Map k v2 mapAccumL :: (s -> v1 -> (s, v2)) -> s -> Map k v1 -> (s, Map k v2) mapAccumLWithKey :: (s -> k -> v1 -> (s, v2)) -> s -> Map k v1 -> (s, Map k v2) mapAccumR :: (s -> v1 -> (s, v2)) -> s -> Map k v1 -> (s, Map k v2) mapAccumRWithKey :: (s -> k -> v1 -> (s, v2)) -> s -> Map k v1 -> (s, Map k v2) instance GHC.Classes.Ord k => GHC.Base.Monoid (Examples.RecoveredMap.Map k v) instance (Control.DeepSeq.NFData k, Control.DeepSeq.NFData v) => Control.DeepSeq.NFData (Examples.RecoveredMap.Map k v) instance (GHC.Classes.Eq k, GHC.Classes.Eq v) => GHC.Classes.Eq (Examples.RecoveredMap.Map k v) instance GHC.Classes.Ord k => GHC.Base.Semigroup (Examples.RecoveredMap.Map k v) instance (GHC.Show.Show k, GHC.Show.Show v) => GHC.Show.Show (Examples.RecoveredMap.Map k v) instance GHC.Base.Functor (Examples.RecoveredMap.Map k)