/      !"#$%&'()*+,-.portable provisionaljohan.tibell@gmail.com /012A non-empty list of key/ value pairs. 3456789:;<O(n); Insert at the head of the list to avoid copying the whole  list. =>?@ABCO(n^2) Left biased union. DEFGHIJKLMN/0123467;=?ACEGIKM/1001233467;=?ACEGIKMO?A SuffixMask stores a path to a Bin node in the hash map. The D uppermost set bit, the Mask, indicates the bit used to distinguish E hashes in the left and right subtrees. The lower-order bits (below C the highest set bit), the Suffix, are set the same way in all the C hashes contained in this subtree of the map. Thus, hashes in the B right subtree will match all the bits in the SuffixMask, but may D have set bits above the Mask. Hashes in the left subtree will not 9 match the Mask bit, but will match all the Suffix bits. PQAA map from keys to values. A map cannot contain duplicate keys; ( each key can map to at most one value. RSTUVWO(n); Transform this map by applying a function to every value. O(n)6 Reduce this map by applying a binary operator to all 9 elements, using the given starting value (typically the " right-identity of the operator). O(1) Construct an empty map. O(n+m)7 The union of two maps. If a key occurs in both maps, ? the mapping from the first will be the mapping in the result. XAInsert a list of key-value pairs which keys all hash to the same D hash value. Prefer key-value pairs in the list to key-value pairs  already in the map. YAInsert a list of key-value pairs which keys all hash to the same E hash value. Prefer key-value pairs already in the map to key-value  pairs in the list. ZAInsert a list of key-value pairs which keys all hash to the same ? hash value. Merge the list of key-value pairs to be inserted xs $ with any existing key-values pairs ys by applying f xs ys. [O(n); Transform this map by applying a function to every value; D when f k v returns Just x, keep an entry mapping k to x, otherwise ! do not include k in the result. O(n): Transform this map by accumulating an Applicative result  from every value. \]bin7 assures that we never have empty trees within a tree. ^_`@Compute the first (lowest-order) bit at which h1 and h2 differ. + This is the mask that distinguishes them. aAGiven mask bit m expressed as a word, compute the suffix bits of # hash i, also expressed as a word. bGiven two hashes and/'or SuffixMasks for which nomatch p1 p2 && @ nomatch p2 p1, compute SuffixMask that differentiates them, by C first computing the mask m and then using that to derive a suffix  from one of them (it won'&t matter which, as those bits are the  same). c@Is the mask of sm1 closer to the root of the tree (lower order) B than the mask of sm2? This is actually approximate, and returns C junk when both sm1 and sm2 are at the same tree level. This must B be disambiguated by first checking sm1==sm2, and subsequently by C checking nomatch in the appropriate direction (which will need to 9 happen anyway to determine if insertion or branching is  appropriate). d Return a e> whose single set bit corresponds to the lowest set bit of w. RST[\]^_ TSRRST[\]^_portable provisionaljohan.tibell@gmail.comfghijk 2467;=GIKMfhjfhjportable provisionaljohan.tibell@gmail.comO(1) Return l if this map is empty, m otherwise. O(n)6 Return the number of key-value mappings in this map.  O(min(n,W))0 Return the value to which the specified key is  mapped, or n. if this map contains no mapping for the key.  O(min(n,W))0 Return the value to which the specified key is B mapped, or the default value if this map contains no mapping for  the key. Default value to return. O(1)( Construct a map with a single element.  O(min(n,W))2 Associate the specified value with the specified B key in this map. If this map previously contained a mapping for % the key, the old value is replaced.  O(min(n,W))4 Remove the mapping for the specified key from this  map if present.  O(min(n,W))3 Associate the value with the key in this map. If D this map previously contained a mapping for the key, the old value E is replaced by the result of applying the given function to the new  and old value. Example:  insertWith f k v map  where f new old = new + old  O(min(n,W)2 Adjust the value tied to a given key in this map 8 only if it is present. Otherwise, leave the map alone. O(n); Transform this map by applying a function to every value. O(n)6 Reduce this map by applying a binary operator to all 9 elements, using the given starting value (typically the " right-identity of the operator). O(n)6 Reduce this map by applying a binary operator to all 9 elements, using the given starting value (typically the C left-identity of the operator). Each application of the operator 9 is evaluated before before using the result in the next > application. This function is strict in the starting value. O(n)6 Reduce this map by applying a binary operator to all 9 elements, using the given starting value (typically the C left-identity of the operator). Each application of the operator 9 is evaluated before before using the result in the next > application. This function is strict in the starting value. O(n)9 Filter this map by retaining only elements satisfying a  predicate. O(n)9 Filter this map by retaining only elements which values  satisfy a predicate. O(n) Return a list of this map's elements. The list is  produced lazily. O(n*min(W, n))* Construct a map from a list of elements. O(n*min(W, n))0 Construct a map from a list of elements. Uses 3 the provided function to merge duplicate entries. O(n) Return a list of this map's keys. The list is produced  lazily. O(n) Return a list of this map' s values. The list is produced  lazily.     portable provisionaljohan.tibell@gmail.comO(1)( Construct a map with a single element.  O(min(n,W))2 Associate the specified value with the specified B key in this map. If this map previously contained a mapping for % the key, the old value is replaced.  O(min(n,W))3 Associate the value with the key in this map. If D this map previously contained a mapping for the key, the old value E is replaced by the result of applying the given function to the new  and old value. Example:  insertWith f k v map  where f new old = new + old  O(min(n,W)2 Adjust the value tied to a given key in this map 8 only if it is present. Otherwise, leave the map alone. O(n); Transform this map by applying a function to every value. O(n*min(W, n))* Construct a map from a list of elements. O(n*min(W, n))0 Construct a map from a list of elements. Uses 3 the provided function to merge duplicate entries.   portable provisionaljohan.tibell@gmail.com 9A set of values. A set cannot contain duplicate values. op!O(1) Construct an empty set. "O(1)( Construct a set with a single element. #O(n)9 Construct a set containing all elements from both sets. $O(1) Return l if this set is empty, m otherwise. %O(n), Return the number of elements in this set. & O(min(n,W)) Return l' if the given value is present in this  set, m otherwise. ' O(min(n,W))& Add the specified value to this set. ( O(min(n,W))- Remove the specified value from this set if  present. )O(n); Transform this set by applying a function to every value. 3 The resulting set may be smaller than the source. *O(n)6 Reduce this set by applying a binary operator to all 9 elements, using the given starting value (typically the C left-identity of the operator). Each application of the operator 9 is evaluated before before using the result in the next > application. This function is strict in the starting value. +O(n)6 Reduce this set by applying a binary operator to all 9 elements, using the given starting value (typically the " right-identity of the operator). ,O(n)9 Filter this set by retaining only elements satisfying a  predicate. -O(n) Return a list of this set's elements. The list is  produced lazily. .O(n*min(W, n))* Construct a set from a list of elements.  !"#$%&'()*+,-. !"#$%&'()*+,-. !"#$%&'()*+,-.portable provisionaljohan.tibell@gmail.comqO(n)3 Return the number of hash collisions in this map. rO(n)2 Return histogram of hash collisions in this map. D Keys are number of entries in bucket, values are number of buckets  of that size. qrqrportable provisionaljohan.tibell@gmail.comqrs      !"  #$%&'()*#+,-./ 01 23 45678&9:;<=>?@ABCDEFGHIJKL./1MNOMNPJQR"STUVunordered-containers-0.1.3.0Data.HashMap.LazyData.HashMap.Strict Data.HashSetData.FullList.LazyData.HashMap.CommonData.FullList.StrictData.HashMap.Lazy.InternalData.HashMap.Strict.InternalHashMap foldrWithKeyemptyuniontraverseWithKeynullsizelookup lookupDefault singletoninsertdelete insertWithadjustmapfoldrfoldl' foldlWithKey' filterWithKeyfiltertoListfromList fromListWithkeyselemsHashSetmemberListConsNilFullListFLsizeLlookupLmemberLinsertLdeleteL insertWithLadjustLunionLmapLtraverseWithKeyLfoldlWithKey'L foldrWithKeyLfilterWithKeyL SuffixMaskHashSuffixTipBinequalnequalinsertCollidingLinsertCollidingRinsertCollidingWithfilterMapWithKeyjoinbinzeronomatch differentBitsuffixWbranchSuffixMaskshortercritBitbaseGHC.WordWordghc-primGHC.BoolTrueFalse Data.MaybeNothingasMap collisionscollisionHistogram