wiʃ      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~5* is used to hold a map on a list of keys. 8 is used to hold a map on the product of two key types. 6 5     OGTrieKey defines a bijection between map types and algebraic key types. OO !"#$%&''e refers to a type with an algebraic representation, armed with methods to convert in each direction.  ) and *( should preserve equality and ordering. (( kB is a fully decomposed representation of k into algebraic pieces. )*+,- !"#$%&'()*+,-'()*#$%& !"+,- !" !"#$%&$%&'()*()*+,-,-Z.A .; is a size-tracking wrapper around a generalized trie map. /&Lookup the value of a key in the map. 4The function will return the corresponding value as (  value),  or   if the key isn't in the map. 0)Is the key a member of the map? See also 1. 0 member 5 (fromList [(5,'a'), (3,'b')]) == True 1 member 1 (fromList [(5,'a'), (3,'b')]) == False 1-Is the key not a member of the map? See also 0. 4 notMember 5 (fromList [(5,'a'), (3,'b')]) == False 3 notMember 1 (fromList [(5,'a'), (3,'b')]) == True 2Find the value at a key.  Calls  $ when the element can not be found. 3The expression (3 def k map) returns  the value at key k or returns default value def ! when the key is not in the map. < findWithDefault 'x' 1 (fromList [(5,'a'), (3,'b')]) == 'x' < findWithDefault 'x' 5 (fromList [(5,'a'), (3,'b')]) == 'a' 4O(1). A map with a single element. / singleton 1 'a' == fromList [(1, 'a')] 5Find 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' 67%Check if the specified map is empty. 8'Returns the size of the specified map. 9Build a map from a list of key/value pairs. See also <. K If the list contains more than one value for the same key, the last value  for the key is retained.  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")] :Build 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 ;Build a map from a list of key/0value pairs with a combining function. See also >. & let f k a1 a2 = (show k) ++ a1 ++ a2 h fromListWithKey f [(5,"a"), (5,"b"), (3,"b"), (3,"a"), (5,"a")] == fromList [(3, "3ab"), (5, "5a5ba")]  fromListWithKey f [] == empty <O(n)5. Build a map from an ascending list in linear time.  :The precondition (input list is ascending) is not checked. 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 an ascending list in linear time with a combining function for 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 an ascending list in linear time with a $ combining function for equal keys.  :The precondition (input list is ascending) is not checked. - let f k a1 a2 = (show k) ++ ":" ++ a1 ++ a2 b fromAscListWithKey f [(3,"b"), (5,"a"), (5,"b"), (5,"b")] == fromList [(3, "b"), (5, "5:b5:ba")] ?O(n)J. Build a map from an ascending list of distinct elements in linear time.   The precondition is not checked. I fromDistinctAscList [(3,"b"), (5,"a")] == fromList [(3, "b"), (5, "a")] @'Insert a new key and value in the map. C If the key is already present in the map, the associated value is # replaced with the supplied value. @ is equivalent to  A  . 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' A;Insert with a function, combining new value and old value.  A 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 the pair (key, 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" B@Insert with a function, combining key, new value and old value.  B 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 the pair (key,f key new_value old_value). 9 Note that the key passed to f is the same key passed to B. 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" C4Combines insert operation with old value retrieval.  The expression (C f k x map) 0 is a pair where the first element is equal to (/ k map) " and the second element equal to (B f k x map). DThe expression (D f k map) updates the value x  at k (if it is in the map). If (f x) is  , 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" EThe expression (E f k map) updates the  value x at k (if it is in the map). If (f k x) is  , # 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" FLookup and update. See also E. 7 The function returns changed value, if it is updated. > 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 p updateLookupWithKey f 5 (fromList [(5,"a"), (3,"b")]) == (Just "5:new 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") G=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 G is equivalent to H (   ). HThe expression (H f k map) alters the value x at k, or absence thereof.  H7 can be used to insert, delete, or update a value in a  .  In short : / k (H f k m) = f (/ k m).  let f _ = Nothing J alter f 7 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "a")] < alter f 5 (fromList [(5,"a"), (3,"b")]) == singleton 3 "b"   let f _ = Just "c" T alter f 7 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "a"), (7, "c")] J alter f 5 (fromList [(5,"a"), (3,"b")]) == fromList [(3, "b"), (5, "c")] IThe expression (I f k map) alters the value x at k1, or absence thereof, and returns the old value.  I7 can be used to insert, delete, or update a value in a  .  In short : -alterLookup f k m = (lookup k m, alter f k m). JO(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")] KO(n)-. Map a function over all values in the map. O map (++ "x") (fromList [(5,"a"), (3,"b")]) == fromList [(3, "bx"), (5, "ax")] LEssentially equivalent to E with a function that takes both the key and the value as arguments. MO(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" NO(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" OO(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")]) PO(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")]) QQ f s! is the map obtained by applying f to each key of s. )The size of the result may be smaller if f maps two or more distinct F keys to the same new key. In this case the value at the smallest of  these keys is retained. e mapKeys (+ 1) (fromList [(5,"a"), (3,"b")]) == fromList [(4, "b"), (6, "a")] W mapKeys (\ _ -> 1) (fromList [(1,"b"), (2,"a"), (3,"d"), (4,"c")]) == singleton 1 "c" W mapKeys (\ _ -> 3) (fromList [(1,"b"), (2,"a"), (3,"d"), (4,"c")]) == singleton 3 "c" RR c f s! is the map obtained by applying f to each key of s. )The size of the result may be smaller if f maps two or more distinct G keys to the same new key. In this case the associated values will be  combined using c. c mapKeysWith (++) (\ _ -> 1) (fromList [(1,"b"), (2,"a"), (3,"d"), (4,"c")]) == singleton 1 "cdab" c mapKeysWith (++) (\ _ -> 3) (fromList [(1,"b"), (2,"a"), (3,"d"), (4,"c")]) == singleton 3 "cdab" SO(n).  S f s == Q f s, but works only when f  is strictly monotonic.  That is, for any values x and y, if x < y then f x < f y.   The precondition is not checked.  Semi-formally, we have:  / and [x < y ==> f x < f y | x <- ls, y <- ls] = ==> mapKeysMonotonic f s == mapKeys f s  where ls = keys s This means that f9 maps distinct original keys to distinct resulting keys. + This function has better performance than Q. a mapKeysMonotonic (\ k -> k * 2) (fromList [(5,"a"), (3,"b")]) == fromList [(6, "b"), (10, "a")] O valid (mapKeysMonotonic (\ k -> k * 2) (fromList [(5,"a"), (3,"b")])) == True P valid (mapKeysMonotonic (\ _ -> 1) (fromList [(5,"a"), (3,"b")])) == False TO(n). Filter all keys/#values that satisfy the predicate. P filterWithKey (\k _ -> k > 4) (fromList [(5,"a"), (3,"b")]) == singleton 5 "a" UO(n)0. Filter all values that satisfy the 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 VO(n)8. Partition the map according to a predicate. The first F map contains all elements that satisfy the predicate, the second all # elements that fail the predicate. 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")]) WO(n)8. Partition the map according to a predicate. The first F map contains all elements that satisfy the predicate, the second all # elements that fail the predicate. 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")]) XO(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 == [] YO(n)1. Return all keys of the map in ascending order. - keys (fromList [(5,"a"), (3,"b")]) == [3,5]  keys empty == [] ZO(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)(. Fold the values in the map, such that  [ f z ==  f z . 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 . X.  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+m)C. Union with a combining function that may discard some elements. ^O(n+m). # 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)#. 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)C. Union with a combining function that may discard some elements. aO(n+m).  The expression (a t1 t2!) takes the left-biased union of t1 and t2.  It prefers t1& when duplicate keys are encountered,  i.e. (a == _  ). r union (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == fromList [(3, "b"), (5, "a"), (7, "C")] bcde.O(n+m). Symmetric difference. Equivalent to ` ( _ _ -> Nothing). fO(n+m)V. Intersection of two maps with a combining function that may discard some elements. gO(n+m)*. 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" hO(n+m)*. Intersection with a combining function. k intersectionWith (++) (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == singleton 5 "aA" iO(n+m)V. Intersection of two maps with a combining function that may discard some elements. jO(n+m). Intersection of two maps. B Return data in the first map for the keys existing in both maps.  (j m1 m2 == h   m1 m2). a intersection (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == singleton 5 "a" kO(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  7, 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" lO(n+m)). Difference with a combining function.  When two equal keys are M encountered, the combining function is applied to the values of these keys.  If it returns  7, the element is discarded (proper set difference). If  it returns (  y+), the element is updated with a new value y. 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" mO(n+m). Difference of two maps. B Return elements of the first map not existing in the second map. _ difference (fromList [(5, "a"), (3, "b")]) (fromList [(5, "A"), (7, "C")]) == singleton 3 "b" nSame as m. o"The minimal key of the map. Calls   if the map is empty. 2 findMin (fromList [(5,"a"), (3,"b")]) == (3,"b") R findMin empty Error: empty map has no minimal element p,The minimal key of the map, if any. Returns   if the map is empty. 6 getMin (fromList [(5,"a"), (3,"b")]) == Just (3,"b") 1 getMin empty == Nothing q"The maximal key of the map. Calls   is the map is empty. 2 findMax (fromList [(5,"a"), (3,"b")]) == (5,"a") R findMax empty Error: empty map has no maximal element r,The maximal key of the map, if any. Returns   if the map is empty. 6 getMax (fromList [(5,"a"), (3,"b")]) == Just (5,"a") 1 getMax empty == Nothing sBDelete the minimal key. Returns an empty map if the map is empty. Q deleteMin (fromList [(5,"a"), (3,"b"), (7,"c")]) == fromList [(5,"a"), (7,"c")]  deleteMin empty == empty tBDelete the maximal key. Returns an empty map if the map is empty. Q deleteMax (fromList [(5,"a"), (3,"b"), (7,"c")]) == fromList [(3,"b"), (5,"a")]  deleteMax empty == empty u%Delete and find the minimal element. b deleteFindMin (fromList [(5,"a"), (3,"b"), (10,"c")]) == ((3,"b"), fromList[(5,"a"), (10,"c")]) t deleteFindMin Error: can not return the minimal element of an empty map v%Delete and find the maximal element. b deleteFindMax (fromList [(5,"a"), (3,"b"), (10,"c")]) == ((10,"c"), fromList [(3,"b"), (5,"a")]) t deleteFindMax empty Error: can not return the maximal element of an empty map w%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" x%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" y%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" z%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" {;Retrieves the value associated with the minimal key of the / map, and the map stripped of that element, or   if passed an  empty map. F minView (fromList [(5,"a"), (3,"b")]) == Just ("b", singleton 5 "a")  minView empty == Nothing |;Retrieves the value associated with the maximal key of the / map, and the map stripped of that element, or   if passed an F maxView (fromList [(5,"a"), (3,"b")]) == Just ("a", singleton 3 "b")  maxView empty == Nothing }7Retrieves the minimal (key,value) pair of the map, and & the map stripped of that element, or   if passed an empty map. Q minViewWithKey (fromList [(5,"a"), (3,"b")]) == Just ((3,"b"), singleton 5 "a") ! minViewWithKey empty == Nothing ~7Retrieves the maximal (key,value) pair of the map, and & the map stripped of that element, or   if passed an empty map. Q maxViewWithKey (fromList [(5,"a"), (3,"b")]) == Just ((5,"a"), singleton 3 "b") ! maxViewWithKey empty == Nothing O(n+m).  This function is defined as ( =  (==)). O(n+m).  The expression ( f t1 t2 ) returns  if  all keys in t1 are in tree t2 , and when f returns  when A applied to their respective values. For example, the following  expressions are all :  E isSubmapOfBy (==) (fromList [('a',1)]) (fromList [('a',1),('b',2)]) E isSubmapOfBy (<=) (fromList [('a',1)]) (fromList [('a',1),('b',2)]) M isSubmapOfBy (==) (fromList [('a',1),('b',2)]) (fromList [('a',1),('b',2)]) But the following are all : E isSubmapOfBy (==) (fromList [('a',2)]) (fromList [('a',1),('b',2)]) E isSubmapOfBy (<) (fromList [('a',1)]) (fromList [('a',1),('b',2)]) E isSubmapOfBy (==) (fromList [('a',1),('b',2)]) (fromList [('a',1)]) The expression ( k map ) is a pair  (map1,map2) where  the keys in map1 are smaller than k and the 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) The expression ( k map) splits a map just  like  but also returns / k 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) y #$%&'()*./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~y.'()*#$%&   5n7801/2364@ABCGDEFHIa_^bcd`]ejhgifmlkKJLNMOPQRS[\ZYX9:;<=>?UTVWopqrstuvwxyz{|}~U./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-.//0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~        TrieMap-0.0.1.2TrieMapTrieMap.AlgebraicTrieMap.MapTypesTrieMap.ApplicativeTrieMap.TrieAlgebraicTrieMap.RadixTrieTrieMap.ReflectionEqTCompMapConstMapIdMap RadixTrie CUnionMapCProdMapUnionMapProdMapOFixMapFixIdunIdConstunConst:+:BA:*:ounOTrieKeyTrieKeyTOrderedOrdunOrd SAlgebraicTSAlgRepTtoSAlgT fromSAlgT AlgebraicTAlgRepTtoAlgTfromAlgT AlgebraicAlgReptoAlgfromAlgAlgWrap unAlgWraplookupmember notMemberfindfindWithDefault singleton!emptynullsizefromList fromListWithfromListWithKey fromAscListfromAscListWithfromAscListWithKeyfromDistinctAscListinsert insertWith insertWithKeyinsertLookupWithKeyupdate updateWithKeyupdateLookupWithKeydeletealter alterLookup mapWithKeymaptraverseWithKeymapMaybeWithKeymapMaybe mapEithermapEitherWithKeymapKeys mapKeysWithmapKeysMonotonic filterWithKeyfilter partitionpartitionWithKeyassocskeyselemsfold foldWithKeyunionMaybeWithKey unionWithKey unionWithunionMaybeWithunionunions unionsWith unionsWithKey symDifferenceintersectionMaybeWithKeyintersectionWithKeyintersectionWithintersectionMaybeWith intersectiondifferenceWithKeydifferenceWith difference\\findMingetMinfindMaxgetMax deleteMin deleteMax deleteFindMin deleteFindMax updateMin updateMaxupdateMinWithKeyupdateMaxWithKeyminViewmaxViewminViewWithKeymaxViewWithKey isSubmapOf isSubmapOfBysplit splitLookupeqSizedgetSizeElemgetElem unConstMapunIdMapRadixunRadMEdgeEdgeCUMapCPMapunCPMapUMapPMapunPMapAppunAppraverse.:<.>onbaseGHC.Basebuild compareKeyemptyAlgnullAlgsizeAlg getSingleAlg guardNullAlgalterLookupAlg lookupAlgfoldWithKeyAlg mapAppAlg mapMaybeAlg mapEitherAlg unionMaybeAlg intersectAlg differenceAlgfromDistAscListAlgfromAscListAlg fromListAlg getMinAlg getMaxAlg updateMinAlg updateMaxAlgvalid isSubmapAlgsplitLookupAlg compareKeyTemptyTnullT guardNullTsizeT getSingleT alterLookupTlookupT foldWithKeyTmapAppT mapMaybeT mapEitherTunionT intersectT differenceTfromDistAscListT fromAscListT fromListTgetMinTgetMaxT updateMinT updateMaxT isSubmapT splitLookupTLeqKeyeqKeyT fromListAlg' singletonAlg mapWithKeyAlg mapWithKeyTmapAlgmapT insertAlginsertTalterAlgalterTfoldrAlg unionMaybeintersectMaybedifferenceMaybe filterLeft filterRight assocsAlgbreakFst breakFst'partitionEithers' pullEither pullEither'unrollrollsingleedge getSingleEdge guardNullEdgealterLookupEdge lookupEdgefoldEdge mapAppEdge mapMaybeEdge mapEitherEdgegroupAscHeads' groupHeadsmapEdgesplitLookupEdge isSubEdge getMinEdge getMaxEdge updateMinEdge updateMaxEdge unionEdge intersectEdgedifferenceEdgesizeMaptrieMap mkTrieMap Data.MaybeJustNothingGHC.Errerrorconstcontainers-0.2.0.1Data.MapMapData.Traversabletraverse Data.EitherLeftRightfoldr Data.Tupleuncurry checkNothingghc-primGHC.BoolTrueFalse