`6      !"#$%&'()*+,-./012345portable provisionallibraries@haskell.org Safe-Inferred&6A set of integers. 7O(n+m). See 8. 9O(1). Is the set empty? :O(n). Cardinality of the set. ; O(min(n,W))$. Is the value a member of the set? < O(min(n,W))!. Is the element not in the set? =O(1). The empty set. >O(1). A set of one element. ? O(min(n,W))4. Add a value to the set. When the value is already ; an element of the set, it is replaced by the new one, ie. ?  is left-biased. @ O(min(n,W))). Delete a value in the set. Returns the . original set when the value was not present. AThe union of a list of sets. BO(n+m). The union of two sets. 8O(n+m). Difference between two sets. CO(n+m) . The intersection of two sets. DO(n+m)9. Is this a proper subset? (ie. a subset but not equal). EO(n+m). Is this a subset?  (s1 E s2) tells whether s1 is a subset of s2. FO(n)3. Filter all elements that satisfy some predicate. GO(n)1. partition the set according to some predicate. H O(min(n,W)). The expression (H x set ) is a pair  (set1,set2)  where set1 comprises the elements of set less than x and set2  comprises the elements of set greater than x. ? split 3 (fromList [1..5]) == (fromList [1,2], fromList [4,5]) I O(min(n,W)) . Performs a H$ but also returns whether the pivot ( element was found in the original set. J O(min(n,W))4. Retrieves the maximal key of the set, and the set  stripped of that element, or K if passed an empty set. L O(min(n,W))4. Retrieves the minimal key of the set, and the set  stripped of that element, or K if passed an empty set. M O(min(n,W))'. Delete and find the minimal element. 2 deleteFindMin set = (findMin set, deleteMin set) N O(min(n,W))'. Delete and find the maximal element. 2 deleteFindMax set = (findMax set, deleteMax set) O O(min(n,W))". The minimal element of the set. P O(min(n,W)) . The maximal element of a set. Q O(min(n,W)). Delete the minimal element. R O(min(n,W)). Delete the maximal element. S O(n*min(n,W)).  S f s! is the set obtained by applying f to each element of s. It'>s worth noting that the size of the result may be smaller if,  for some (x,y), x /= y && f x == f y TO(n);. Fold over the elements of a set in an unspecified order.  sum set == fold (+) 0 set  elems set == fold (:) [] set UO(n)B. The elements of a set. (For sets, this is equivalent to toList) VO(n)). Convert the set to a list of elements. WO(n)4. Convert the set to an ascending list of elements. X O(n*min(n,W))(. Create a set from a list of integers. YO(n)2. Build a set from an ascending list of elements.  :The precondition (input list is ascending) is not checked. ZO(n);. Build a set from an ascending list of distinct elements.  CThe precondition (input list is strictly ascending) is not checked. [O(n);. Show the tree that implements the set. The tree is shown " in a compressed, hanging format. \O(n). The expression (\ hang wide map) shows & the tree that implements the set. If hang is  ], a hanging5 tree is shown otherwise a rotated tree is shown. If  wide is ]", an extra wide version is shown. W^_`abc6defghij79:;<kl=>?m@AB8CDnEFGHoIpJqLrMNOPQRSTsUVWXYZtu[\vwxyz{|}~)6def79:;<=>?@AB8CDEFGHIJLMNOPQRSTUVWXYZ[\R^`_abc6fedghij79:;<kl=>?m@AB8CDnEFGHoIpJqLrMNOPQRSTsUVWXYZtu[\vwxyz{|}~portable provisionallibraries@haskell.org Safe-InferredW#A strict map of integers to values a.  O(min(n,W)). Find the value at a key.  Calls $ when the element can not be found. B fromList [(5,'a'), (3,'b')] ! 1 Error: element not in the map ( fromList [(5,'a'), (3,'b')] ! 5 == 'a' Same as . O(1). Is the map empty? , Data.IntMap.null (empty) == True - Data.IntMap.null (singleton 1 'a') == False O(n)!. Number of elements in the map. 3 size empty == 0 3 size (singleton 1 'a') == 1 3 size (fromList([(1,'a'), (2,'c'), (3,'b')])) == 3  O(min(n,W))". Is the key a member of the map? 0 member 5 (fromList [(5,'a'), (3,'b')]) == True 1 member 1 (fromList [(5,'a'), (3,'b')]) == False O(log n)&. Is the key not a member of the map? 4 notMember 5 (fromList [(5,'a'), (3,'b')]) == False 3 notMember 1 (fromList [(5,'a'), (3,'b')]) == True  O(min(n,W))1. Lookup the value at a key in the map. See also . inlining lookup doesn't seem to help.  O(min(n,W)). The expression ( def k map)  returns the value at key k or returns def when the key is not an  element of the map. < findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')]) == 'x' < findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')]) == 'a' O(1). The empty map.  empty == fromList []  size empty == 0 O(1). A map of one element. / singleton 1 'a' == fromList [(1, 'a')]  size (singleton 1 'a') == 1  O(min(n,W)). Insert a new key/value pair in the map. C If the key is already present in the map, the associated value is ( replaced with the supplied value, i.e.  is equivalent to   . M insert 5 'x' (fromList [(5,'a'), (3,'b')]) == fromList [(3, 'b'), (5, 'x')] W insert 7 'x' (fromList [(5,'a'), (3,'b')]) == fromList [(3, 'b'), (5, 'a'), (7, 'x')] ? insert 5 'x' empty == singleton 5 'x'  O(min(n,W))$. Insert with a combining function.   f key value mp ( will insert the pair (key, value) into mp if key does @ not exist in the map. If the key does exist, the function will  insert f new_value old_value. [ insertWith (++) 5 "xxx" (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "xxxa")] d insertWith (++) 7 "xxx" (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "a"), (7, "xxx")] L insertWith (++) 5 "xxx" empty == singleton 5 "xxx"  O(min(n,W))$. Insert with a combining function.   f key value mp ( will insert the pair (key, value) into mp if key does @ not exist in the map. If the key does exist, the function will  insert f key new_value old_value. T let f key new_value old_value = (show key) ++ ":" ++ new_value ++ "|" ++ old_value ^ insertWithKey f 5 "xxx" (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "5:xxx|a")] d insertWithKey f 7 "xxx" (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "a"), (7, "xxx")] L insertWithKey f 5 "xxx" empty == singleton 5 "xxx"  O(min(n,W)). The expression ( f k x map) 0 is a pair where the first element is equal to ( k map) " and the second element equal to ( f k x map).  T let f key new_value old_value = (show key) ++ ":" ++ new_value ++ "|" ++ old_value p insertLookupWithKey f 5 "xxx" (fromList [(5,"a"), (3,"b")]) == (Just "a", fromList [(3, "b"), (5, "5:xxx|a")]) v insertLookupWithKey f 7 "xxx" (fromList [(5,"a"), (3,"b")]) == (Nothing, fromList [(3, "b"), (5, "a"), (7, "xxx")]) ^ insertLookupWithKey f 5 "xxx" empty == (Nothing, singleton 5 "xxx") This is how to define  insertLookup using insertLookupWithKey: D let insertLookup kx x t = insertLookupWithKey (\_ a _ -> a) kx x t _ insertLookup 5 "x" (fromList [(5,"a"), (3,"b")]) == (Just "a", fromList [(3, "b"), (5, "x")]) i insertLookup 7 "x" (fromList [(5,"a"), (3,"b")]) == (Nothing, fromList [(3, "b"), (5, "a"), (7, "x")])  O(min(n,W))?. Delete a key and its value from the map. When the key is not 4 a member of the map, the original map is returned. ; delete 5 (fromList [(5,"a"), (3,"b")]) == singleton 3 "b" I delete 7 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "a")] 1 delete 5 empty == empty  O(min(n,W))8. Adjust a value at a specific key. When the key is not 4 a member of the map, the original map is returned. Y adjust ("new " ++) 5 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "new a")] U adjust ("new " ++) 7 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "a")] = adjust ("new " ++) 7 empty == empty  O(min(n,W))8. Adjust a value at a specific key. When the key is not 4 a member of the map, the original map is returned. * let f key x = (show key) ++ ":new " ++ x X adjustWithKey f 5 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "5:new a")] R adjustWithKey f 7 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "a")] : adjustWithKey f 7 empty == empty  O(min(n,W)). The expression ( f k map) updates the value x  at k (if it is in the map). If (f x) is K, the element is  deleted. If it is ( y ), the key k is bound to the new value y. 6 let f x = if x == "a" then Just "new a" else Nothing O update f 5 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "new a")] K update f 7 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "a")] = update f 3 (fromList [(5,"a"), (3,"b")]) == singleton 5 "a"  O(min(n,W)). The expression ( f k map) updates the value x  at k (if it is in the map). If (f k x) is K, the element is  deleted. If it is ( y ), the key k is bound to the new value y. G let f k x = if x == "a" then Just ((show k) ++ ":new a") else Nothing X updateWithKey f 5 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "5:new a")] R updateWithKey f 7 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "a")] D updateWithKey f 3 (fromList [(5,"a"), (3,"b")]) == singleton 5 "a"  O(min(n,W)). Lookup and update. 8 The function returns original value, if it is updated. ! This is different behavior than . = Returns the original key value if the map entry is deleted. G let f k x = if x == "a" then Just ((show k) ++ ":new a") else Nothing j updateLookupWithKey f 5 (fromList [(5,"a"), (3,"b")]) == (Just "a", fromList [(3, "b"), (5, "5:new a")]) d updateLookupWithKey f 7 (fromList [(5,"a"), (3,"b")]) == (Nothing, fromList [(3, "b"), (5, "a")]) V updateLookupWithKey f 3 (fromList [(5,"a"), (3,"b")]) == (Just "b", singleton 5 "a") O(log n). The expression ( f k map) alters the value x at k, or absence thereof.  8 can be used to insert, delete, or update a value in an .  In short :  k ( f k m) = f ( k m). The union of a list of maps. n unions [(fromList [(5, "a"), (3, "b")]), (fromList [(5, "A"), (7, "C")]), (fromList [(5, "A3"), (3, "B3")])] 0 == fromList [(3, "b"), (5, "a"), (7, "C")] n unions [(fromList [(5, "A3"), (3, "B3")]), (fromList [(5, "A"), (7, "C")]), (fromList [(5, "a"), (3, "b")])] 2 == fromList [(3, "B3"), (5, "A3"), (7, "C")] 9The union of a list of maps, with a combining operation. w unionsWith (++) [(fromList [(5, "a"), (3, "b")]), (fromList [(5, "A"), (7, "C")]), (fromList [(5, "A3"), (3, "B3")])] 5 == fromList [(3, "bB3"), (5, "aAA3"), (7, "C")] O(n+m)'. The (left-biased) union of two maps. ? It prefers the first map when duplicate keys are encountered,  i.e. ( ==  ). r union (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == fromList [(3, "b"), (5, "a"), (7, "C")] O(n+m)'. The union with a combining function. | unionWith (++) (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == fromList [(3, "b"), (5, "aA"), (7, "C")] O(n+m)'. The union with a combining function. Z let f key left_value right_value = (show key) ++ ":" ++ left_value ++ "|" ++ right_value  unionWithKey f (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == fromList [(3, "b"), (5, "5:a|A"), (7, "C")] O(n+m)/. Difference between two maps (based on keys). _ difference (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == singleton 3 "b" O(n+m)(. Difference with a combining function. E let f al ar = if al == "b" then Just (al ++ ":" ++ ar) else Nothing \ differenceWith f (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (3, "B"), (7, "C")])  == singleton 3 "b:B" O(n+m)@. Difference with a combining function. When two equal keys are L encountered, the combining function is applied to the key and both values.  If it returns K4, the element is discarded (proper set difference).  If it returns ( y+), the element is updated with a new value y. Z let f k al ar = if al == "b" then Just ((show k) ++ ":" ++ al ++ "|" ++ ar) else Nothing ` differenceWithKey f (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (3, "B"), (10, "C")])  == singleton 3 "3:b|B" O(n+m)>. The (left-biased) intersection of two maps (based on keys). a intersection (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == singleton 5 "a" O(n+m).. The intersection with a combining function. k intersectionWith (++) (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == singleton 5 "aA" O(n+m).. The intersection with a combining function. 4 let f k al ar = (show k) ++ ":" ++ al ++ "|" ++ ar n intersectionWithKey f (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == singleton 5 "5:a|A" O(log n)'. Update the value at the minimal key. x updateMinWithKey (\ k a -> Just ((show k) ++ ":" ++ a)) (fromList [(5,"a"), (3,"b")]) == fromList [(3,"3:b"), (5,"a")] j updateMinWithKey (\ _ _ -> Nothing) (fromList [(5,"a"), (3,"b")]) == singleton 5 "a" O(log n)'. Update the value at the maximal key. x updateMaxWithKey (\ k a -> Just ((show k) ++ ":" ++ a)) (fromList [(5,"a"), (3,"b")]) == fromList [(3,"b"), (5,"5:a")] j updateMaxWithKey (\ _ _ -> Nothing) (fromList [(5,"a"), (3,"b")]) == singleton 3 "b" O(log n)9. Retrieves the maximal (key,value) pair of the map, and & the map stripped of that element, or K if passed an empty map. Q maxViewWithKey (fromList [(5,"a"), (3,"b")]) == Just ((5,"a"), singleton 3 "b") ! maxViewWithKey empty == Nothing O(log n)9. Retrieves the minimal (key,value) pair of the map, and & the map stripped of that element, or K if passed an empty map. Q minViewWithKey (fromList [(5,"a"), (3,"b")]) == Just ((3,"b"), singleton 5 "a") ! minViewWithKey empty == Nothing O(log n)'. Update the value at the maximal key. d updateMax (\ a -> Just ("X" ++ a)) (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "Xa")] U updateMax (\ _ -> Nothing) (fromList [(5,"a"), (3,"b")]) == singleton 3 "b" O(log n)'. Update the value at the minimal key. d updateMin (\ a -> Just ("X" ++ a)) (fromList [(5,"a"), (3,"b")]) == fromList [(3, "Xb"), (5, "a")] U updateMin (\ _ -> Nothing) (fromList [(5,"a"), (3,"b")]) == singleton 5 "a" O(log n)4. Retrieves the maximal key of the map, and the map  stripped of that element, or K if passed an empty map. O(log n)4. Retrieves the minimal key of the map, and the map  stripped of that element, or K if passed an empty map. O(log n)'. Delete and find the maximal element. O(log n)'. Delete and find the minimal element. O(log n). The minimal key of the map. O(log n). The maximal key of the map. O(log n)M. Delete the minimal key. An error is thrown if the IntMap is already empty. * Note, this is not the same behavior Map. O(log n)M. Delete the maximal key. An error is thrown if the IntMap is already empty. * Note, this is not the same behavior Map. O(n+m)9. Is this a proper submap? (ie. a submap but not equal).  Defined as ( =  (==)). O(n+m)9. Is this a proper submap? (ie. a submap but not equal).  The expression ( f m1 m2 ) returns ] when  m1 and m2 are not equal,  all keys in m1 are in m2 , and when f returns ] when @ applied to their respective values. For example, the following  expressions are all ]:  E isProperSubmapOfBy (==) (fromList [(1,1)]) (fromList [(1,1),(2,2)]) E isProperSubmapOfBy (<=) (fromList [(1,1)]) (fromList [(1,1),(2,2)]) But the following are all : K isProperSubmapOfBy (==) (fromList [(1,1),(2,2)]) (fromList [(1,1),(2,2)]) E isProperSubmapOfBy (==) (fromList [(1,1),(2,2)]) (fromList [(1,1)]) K isProperSubmapOfBy (<) (fromList [(1,1)]) (fromList [(1,1),(2,2)]) O(n+m). Is this a submap?  Defined as ( =  (==)). O(n+m).  The expression ( f m1 m2 ) returns ] if  all keys in m1 are in m2 , and when f returns ] when @ applied to their respective values. For example, the following  expressions are all ]:  ? isSubmapOfBy (==) (fromList [(1,1)]) (fromList [(1,1),(2,2)]) ? isSubmapOfBy (<=) (fromList [(1,1)]) (fromList [(1,1),(2,2)]) E isSubmapOfBy (==) (fromList [(1,1),(2,2)]) (fromList [(1,1),(2,2)]) But the following are all : ? isSubmapOfBy (==) (fromList [(1,2)]) (fromList [(1,1),(2,2)]) > isSubmapOfBy (<) (fromList [(1,1)]) (fromList [(1,1),(2,2)]) ? isSubmapOfBy (==) (fromList [(1,1),(2,2)]) (fromList [(1,1)]) O(n)-. Map a function over all values in the map. O map (++ "x") (fromList [(5,"a"), (3,"b")]) == fromList [(3, "bx"), (5, "ax")] O(n)-. Map a function over all values in the map. & let f key x = (show key) ++ ":" ++ x Q mapWithKey f (fromList [(5,"a"), (3,"b")]) == fromList [(3, "3:b"), (5, "5:a")] O(n). The function  threads an accumulating 6 argument through the map in ascending order of keys.  let f a b = (a ++ b, b ++ "X") p mapAccum f "Everything: " (fromList [(5,"a"), (3,"b")]) == ("Everything: ba", fromList [(3, "bX"), (5, "aX")]) O(n). The function  threads an accumulating 6 argument through the map in ascending order of keys. < let f a k b = (a ++ " " ++ (show k) ++ "-" ++ b, b ++ "X") { mapAccumWithKey f "Everything:" (fromList [(5,"a"), (3,"b")]) == ("Everything: 3-b 5-a", fromList [(3, "bX"), (5, "aX")]) O(n). The function  threads an accumulating 6 argument through the map in ascending order of keys. O(n). The function  mapAccumR threads an accumulating 7 argument through the map in descending order of keys. O(n)1. Filter all values that satisfy some predicate. A filter (> "a") (fromList [(5,"a"), (3,"b")]) == singleton 3 "b" 7 filter (> "x") (fromList [(5,"a"), (3,"b")]) == empty 7 filter (< "a") (fromList [(5,"a"), (3,"b")]) == empty O(n). Filter all keys/$values that satisfy some predicate. P filterWithKey (\k _ -> k > 4) (fromList [(5,"a"), (3,"b")]) == singleton 5 "a" O(n);. Partition the map according to some predicate. The first F map contains all elements that satisfy the predicate, the second all , elements that fail the predicate. See also . W partition (> "a") (fromList [(5,"a"), (3,"b")]) == (singleton 3 "b", singleton 5 "a") [ partition (< "x") (fromList [(5,"a"), (3,"b")]) == (fromList [(3, "b"), (5, "a")], empty) [ partition (> "x") (fromList [(5,"a"), (3,"b")]) == (empty, fromList [(3, "b"), (5, "a")]) O(n);. Partition the map according to some predicate. The first F map contains all elements that satisfy the predicate, the second all , elements that fail the predicate. See also . g partitionWithKey (\ k _ -> k > 3) (fromList [(5,"a"), (3,"b")]) == (singleton 5 "a", singleton 3 "b") k partitionWithKey (\ k _ -> k < 7) (fromList [(5,"a"), (3,"b")]) == (fromList [(3, "b"), (5, "a")], empty) k partitionWithKey (\ k _ -> k > 7) (fromList [(5,"a"), (3,"b")]) == (empty, fromList [(3, "b"), (5, "a")]) O(n). Map values and collect the  results. 6 let f x = if x == "a" then Just "new a" else Nothing A mapMaybe f (fromList [(5,"a"), (3,"b")]) == singleton 5 "new a" O(n) . Map keys/values and collect the  results. D let f k _ = if k < 5 then Just ("key : " ++ (show k)) else Nothing J mapMaybeWithKey f (fromList [(5,"a"), (3,"b")]) == singleton 3 "key : 3" O(n). Map values and separate the  and  results. / let f a = if a < "c" then Left a else Right a = mapEither f (fromList [(5,"a"), (3,"b"), (1,"x"), (7,"z")]) C == (fromList [(3,"b"), (5,"a")], fromList [(1,"x"), (7,"z")])  L mapEither (\ a -> Right a) (fromList [(5,"a"), (3,"b"), (1,"x"), (7,"z")]) ? == (empty, fromList [(5,"a"), (3,"b"), (1,"x"), (7,"z")]) O(n) . Map keys/values and separate the  and  results. < let f k a = if k < 5 then Left (k * 2) else Right (a ++ a) D mapEitherWithKey f (fromList [(5,"a"), (3,"b"), (1,"x"), (7,"z")]) A == (fromList [(1,2), (3,6)], fromList [(5,"aa"), (7,"zz")])  T mapEitherWithKey (\_ a -> Right a) (fromList [(5,"a"), (3,"b"), (1,"x"), (7,"z")]) ? == (empty, fromList [(1,"x"), (3,"b"), (5,"a"), (7,"z")]) O(log n). The expression ( k map ) is a pair  (map1,map2)  where all keys in map1 are lower than k and all keys in  map2 larger than k. Any key equal to k is found in neither map1 nor map2. O split 2 (fromList [(5,"a"), (3,"b")]) == (empty, fromList [(3,"b"), (5,"a")]) C split 3 (fromList [(5,"a"), (3,"b")]) == (empty, singleton 5 "a") M split 4 (fromList [(5,"a"), (3,"b")]) == (singleton 3 "b", singleton 5 "a") C split 5 (fromList [(5,"a"), (3,"b")]) == (singleton 3 "b", empty) O split 6 (fromList [(5,"a"), (3,"b")]) == (fromList [(3,"b"), (5,"a")], empty) O(log n) . Performs a $ but also returns whether the pivot $ key was found in the original map. ^ splitLookup 2 (fromList [(5,"a"), (3,"b")]) == (empty, Nothing, fromList [(3,"b"), (5,"a")]) S splitLookup 3 (fromList [(5,"a"), (3,"b")]) == (empty, Just "b", singleton 5 "a") \ splitLookup 4 (fromList [(5,"a"), (3,"b")]) == (singleton 3 "b", Nothing, singleton 5 "a") S splitLookup 5 (fromList [(5,"a"), (3,"b")]) == (singleton 3 "b", Just "a", empty) ^ splitLookup 6 (fromList [(5,"a"), (3,"b")]) == (fromList [(3,"b"), (5,"a")], Nothing, empty) O(n)(. Fold the values in the map, such that   f z ==    f z . .  For example,   elems map = fold (:) [] map  let f a len = len + (length a) / fold f 0 (fromList [(5,"a"), (3,"bbb")]) == 4 O(n)1. Fold the keys and values in the map, such that   f z ==    ( f) z . .  For example,  1 keys map = foldWithKey (\k x ks -> k:ks) [] map A let f k a result = result ++ "(" ++ (show k) ++ ":" ++ a ++ ")" J foldWithKey f "Map: " (fromList [(5,"a"), (3,"b")]) == "Map: (5:a)(3:b)" O(n). F Return all elements of the map in the ascending order of their keys. 2 elems (fromList [(5,"a"), (3,"b")]) == ["b","a"]  elems empty == [] O(n)1. Return all keys of the map in ascending order. - keys (fromList [(5,"a"), (3,"b")]) == [3,5]  keys empty == []  O(n*min(n,W))". The set of all keys of the map. E keysSet (fromList [(5,"a"), (3,"b")]) == Data.IntSet.fromList [3,5] $ keysSet empty == Data.IntSet.empty O(n). Return all key//value pairs in the map in ascending key order. < assocs (fromList [(5,"a"), (3,"b")]) == [(3,"b"), (5,"a")]  assocs empty == [] O(n)". Convert the map to a list of key/ value pairs. < toList (fromList [(5,"a"), (3,"b")]) == [(3,"b"), (5,"a")]  toList empty == [] O(n)". Convert the map to a list of key/value pairs where the  keys are in ascending order. ? toAscList (fromList [(5,"a"), (3,"b")]) == [(3,"b"), (5,"a")]  O(n*min(n,W))!. Create a map from a list of key/ value pairs.  fromList [] == empty F fromList [(5,"a"), (3,"b"), (5, "c")] == fromList [(5,"c"), (3,"b")] F fromList [(5,"c"), (3,"b"), (5, "a")] == fromList [(5,"a"), (3,"b")]  O(n*min(n,W))!. Create a map from a list of key/0value pairs with a combining function. See also . e fromListWith (++) [(5,"a"), (5,"b"), (3,"b"), (3,"a"), (5,"a")] == fromList [(3, "ab"), (5, "aba")]  fromListWith (++) [] == empty  O(n*min(n,W)) . Build a map from a list of key/Bvalue pairs with a combining function. See also fromAscListWithKey'. e fromListWith (++) [(5,"a"), (5,"b"), (3,"b"), (3,"a"), (5,"a")] == fromList [(3, "ab"), (5, "aba")]  fromListWith (++) [] == empty O(n) . Build a map from a list of key/value pairs where " the keys are in ascending order. J fromAscList [(3,"b"), (5,"a")] == fromList [(3, "b"), (5, "a")] J fromAscList [(3,"b"), (5,"a"), (5,"b")] == fromList [(3, "b"), (5, "b")] O(n) . Build a map from a list of key/value pairs where K the keys are in ascending order, with a combining function on equal keys.  :The precondition (input list is ascending) is not checked. T fromAscListWith (++) [(3,"b"), (5,"a"), (5,"b")] == fromList [(3, "b"), (5, "ba")] O(n) . Build a map from a list of key/value pairs where K the keys are in ascending order, with a combining function on equal keys.  :The precondition (input list is ascending) is not checked. T fromAscListWith (++) [(3,"b"), (5,"a"), (5,"b")] == fromList [(3, "b"), (5, "ba")] O(n) . Build a map from a list of key/value pairs where 3 the keys are in ascending order and all distinct.  CThe precondition (input list is strictly ascending) is not checked. I fromDistinctAscList [(3,"b"), (5,"a")] == fromList [(3, "b"), (5, "a")] O(n);. Show the tree that implements the map. The tree is shown " in a compressed, hanging format. O(n). The expression ( hang wide map) shows & the tree that implements the map. If hang is  ], a hanging5 tree is shown otherwise a rotated tree is shown. If  wide is ]", an extra wide version is shown. GCreate an IntMap from IntSet. This is simpler and probably faster than ? conversion to ascending lists and then to IntMap through zip. FThis is unionWith where right operand represented as a IntSet of keys  and single value.       !"V      !" Safe-Inferred #$%&'()*+,-    #$%&'()*+,-NoneA (modifable) value. .%Counting messages sent and received. /(Messages the worker thread can receive. #Monad to operate with GraphHammer. 4A representation parametrized by analyses required. DCreate a GraphHammer structure for parallel GraphHammer processing. 0Compute  local job flag from two vertices.  Properties: G 1. local job for (v1,v2) at n1 == not (local job for (v1,v2) at n2) 0 n1 and n2 are node indices for v1 and v2. I an exception is for n1 is not our node and n2 is not our node too. 5 2. local job for (v1,v2) == local job for (v2,v1) C It is possible for those properties to do not hold for completely $ local or completely external pair. 15Get analyses for no more than 100 affected vertices. Run the analyses stack.  at this momemt it'0s possible to run only parallelizable analyses. 24Is analyses stack parallelizable with our method?.. Fetch analysis result. Store analysis result. !)Update atomically result with increment. 31Define a (mutable) value local to a computation. "'Define a local value and assign to it. )Constant value *Assigning a value. 456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefg.hi/jklmnopqrstuvwxyz{|}~Max job nodes  Node index 01Max number of nodes #Function to obtain edges to insert A stack of analyses to perform 2 !3"#$%&'()*+,  !"#$%&'()*+, ")*#$%&'( !+,456789:;<=?>@EDCBALKJIHGFMNOPQRS ^]\[ZYXWVUT_a`bcdefg.ih/nmlkjopqrs tuvwxyz{|}~012 !3"#$%&'()*+, Safe-Inferred -A class that defines array interface for GraphHammer information. .(A type for arrays with specified index. /Create an array. ' First parameter is a length of array. 0Get a value from array. 1Store an encoded value. 2A class to store information. 3 A type we encode our values to. 4A method to encode value. 5Decoding process. -./012345 -./012345 2345-./01-./012345 None'  !"#$%&'()*+,-./012345  !"#$%&' ()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ XDEFGHIzJKLXMXYNOPW[]\^_`almbSTUXXcdXfeghijkopqtrsuvwxy}        !"#$%&'()*+,-./012234 56789:;<=>?@ABCDECFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~GraphHammer-0.3GraphHammer.SimplestParallelGraphHammer.HListGraphHammer.InfoGraphHammer.IntSetGraphHammer.IntMapData.MaplookupupdateLookupWithKeyPreludefoldr GraphHammerGraph500-0.4.0 G500.IndexIndexHLengthhLengthNatnaturalSZTyEqTyOrTyCastFAILTRUEFALSE:.NilhHeadhTailfromSuccAnalysisEnabledAnalysesEnabledAnalysisRequiredAnalysesValueComposedAnM GraphHammerMgraphHammerNewrunAnalysesStackonEdgesanIfgetAnalysisResultputAnalysisResultincrementAnalysisResult localValue+.-.*.divV====/=cst$= basicAnalysisderivedAnalysis InfoArrayEncodedInfoArraynewEncodedInfoArrayreadEncodedInfostoreEncodedInfoInfo EncodingType encodeInfo decodeInfoIntSet\\ differencenullsizemember notMemberempty singletoninsertdeleteunionsunion intersectionisProperSubsetOf isSubsetOffilter partitionsplit splitMembermaxViewbase Data.MaybeNothingminView deleteFindMin deleteFindMaxfindMinfindMax deleteMin deleteMaxmapfoldelemstoList toAscListfromList fromAscListfromDistinctAscListshowTree showTreeWithghc-prim GHC.TypesTrueStackNadaPushMaskPrefixKeyBinTip natFromInt intFromNatshiftRLlookupNinsertR subsetCmpsplit' splitMember'maxViewUnsignedminViewUnsignedequalnequal showsTree showsTreeHangshowBinshowWide showsBarsnodewithBar withEmptyjoinbinzeronomatchmatchmaskzeroNmaskWshorter branchMaskhighestBitMask foldlStrict $fReadIntSet $fShowIntSet $fOrdIntSet $fEqIntSet$fMonoidIntSetIntMap!GHC.ErrerrorfindWithDefault insertWithGHC.Baseconst insertWithKeyinsertLookupWithKeyadjust adjustWithKeyupdateJust updateWithKeyalter unionsWith unionWith unionWithKeydifferenceWithdifferenceWithKeyintersectionWithintersectionWithKeyupdateMinWithKeyupdateMaxWithKeymaxViewWithKeyminViewWithKey updateMax updateMinisProperSubmapOfisProperSubmapOfByFalse isSubmapOf isSubmapOfBy mapWithKeymapAccummapAccumWithKey mapAccumLmapAccumRWithKey filterWithKeypartitionWithKeymapMaybemapMaybeWithKey mapEither Data.EitherLeftRightmapEitherWithKey splitLookup foldWithKey Data.TupleuncurrykeyskeysSetassocs fromListWithfromAscListWithfromListWithKeyfromAscListWithKeymapFromSetValueunionWithSetValuefind'updateMinWithKeyUnsignedupdateMaxWithKeyUnsignedfirst submapCmp splitLookup'foldr' $fReadIntMap $fShowIntMap$fFunctorIntMap $fOrdIntMap $fEqIntMap$fTraversableIntMap$fFoldableIntMap$fMonoidIntMap $fHLength:. $fHLengthNil$fNatS$fNatZ $fTyEqbxx $fTyEqFALSExy$fTyOrFALSEFALSEFALSE$fTyOrFALSETRUETRUE$fTyOrTRUEFALSETRUE$fTyOrTRUETRUETRUE $fTyCastaa SendReceiveMsggraphHammerLocalJobgraphHammerGetAffectedAnalysesanalysesParallelizable defineLocal AnalysisIndex analysisIndexAIMIntSt istLocals isEdgeIndexisContsUnOpNegateNotBinOpEqualDivMulMinusPlusValueAnalysisResult ValueComposedValueUnValueBin ValueConst ValueLocal ValueArgumentAsgnAnSt asValueIndex asStatements AnStatList AnStatementASContinueEdgeIsectBulkASContinueEdgeIsectASIntersectionBulkOpsASOnFlaggedVertices ASFlagVertexASSetAnalysisResultASIf ASAtomicIncrASOnEdgesIntersection ASOnEdgesASAssignBulkOp CountIncrBulkIncr AnalysisValuetoInt64 fromInt64 MsgChanArrChanArrMsgChanReceivedSentStop GetAffectedContinueIntersectionAtomicIncrementPortion VertexSetVertex vertexNode vertexIndexgraphHammerMaxNodesgraphHammerNodeIndex_graphHammerBatchCountergraphHammerEdgesgraphHammerAnalysesgraphHammerNodesAffected_graphHammerAnalysesAffectedgraphHammerChannelsgraphHammerSendReceiveChannelgraphHammerPortionEdgesgraphHammerOthersAnalysesgraphHammerContinuationGroupsEdgeSetAnalysesArrays OtherAnalyses AnalysesMapVertexAnalysesanalysisSliceSizeShiftanalysisSliceSizeanalysisSliceSizeMaskvertexSetEmptyvertexSetIntersectionvertexSetUnionvertexSetToList vertexToIndex indexToVertexvertexSetMembervertexSetSingleton vertexSetSizegraphHammerCountReceivedgraphHammerCountSent graphHammerNewAnalysisSliceArraygraphHammerFillPortionEdgesgraphHammerCommitNewPortiongraphHammerSplitIndex graphHammerVertexSetIntersection)graphHammerVertexSetIntersectionAsIndicesgraphHammerEdgeExistsgraphHammerGetEdgeSetgraphHammerGrowAnalysisArrays graphHammerGetAnalysisArrayIndexgraphHammerGetAnalysis_graphHammerSetAnalysisgraphHammerIncrementAnalysis graphHammerBulkIncrementAnalysisgraphHammerGetOtherAnalysesgraphHammerIndexToLocalgraphHammerIndexToNodeIndexgraphHammerCurrentNodeIndexgraphHammerLocalIndexgraphHammerLocalVertexgraphHammerMergeIncrementsgraphHammerSendToNode_graphHammerSendToNodeOfVertexgraphHammerGroupContinuations"graphHammerDistributeContinuationsgraphHammerClearAffected_createMessageChannel workerThreadsendOtherIncrements workOnEdge insertAndAnalyzeSimpleSequentialrunStack indentShowindentindentShowStats addStatement cutStatementsgetEnabledAnalysesgetAnalysisIndexnotVinterpretInitialEnv interpretinterpretStatementsinterpretStatement assignValueinterpretIntersectionBulkOpsinterpretBulkOpsinterpretEdgesIntersectioninterpretOnEdgesinterpretValueinterpretVertexValueoptimizeStatementsrecognizeOptimizeIntersectionoptimizeIntersection uncomposerecognizeIntersection$fAnalysisIndexa:.$fAnalysisIndexa:.0$fEnabledAnalyses:.eas$fEnabledAnalysesNileas$fEnabledAnalysisa:.$fEnabledAnalysisa:.0 $fShowBinOp $fShowValue$fShowAnStatement$fAnalysisValueInt64$fAnalysisValueInt$fAnalysisValueBool$fInfoArrayInt()$fInfoArrayInt64()$fInfo()