úÎ@­=³4      !"#$%&'()*+,-./0123Safe:0=A trie consists of a list of values and labelled child tries. List of values in the root node.'Map of atomic names to child sub-tries.4'A map of atomic names onto child nodes. An empty  constant. A neutral element of   and zero of .A : containing just one value in its root and no child nodes.A : containing the given list in its root and no child nodes. An infinite w that has in each node the same list of values and, under each name from the given set, a child identical to the root.IChange a list in the root node with a function and leave children intact.2Add a new value to the root node's list of values.  Check if a  is empty. &A total number of values in all nodes. 2Check for equality counting the order of elements. 2Check for equality ignoring the order of elements.  Check if two s, t1 and t2<, are equivalent up to a custom list equivalence predicate p . True if and only if (1) both Es have non-empty nodes at the same paths and (2) for each such path w, value lists from t1 and t2 under w are equivalent, i.e. satisfy p. Select a * subnode identified by the given path, or  if there is no such path.EPerform the given transformation on a subnode identified by the path.DAdd a value to a list of values in a subnode identified by the path.4Replace a subnode identified by the path with a new ..Delete a subnode identified by the given path.4Unite a subnode identified by the path with another .8Intersect a subnode identified by the path with another .3Leave only those values that satisfy the predicate p.@Leave only the nodes whose compound names are in the given list.BLeave only those nodes whose compound names satisfy the predicate p.PLeave only those values that, with their compound names, satisfy the predicate p.$Map a function over all values in a .9Map a function over all values with their compound names.-Apply a list of functions to all values in a .>Apply a list of functions to each value and its compound name.4Map a function over entire lists contained in nodes.IMap a function over entire lists in all nodes, with their compound names.Cartesian product of two s, t1 and t2. The resulting  consists of all possible pairs (x1, x2) under a concatenated name v1 ++ v2 where x1 is a value in t1 under a name v1, and x2 is a value from t2 under the name v2.  Union of s.!Union of a list of s."Intersection of s.#$Intersection of a non-empty list of s.$ Flatten a " whose values are, in their turn, s.%Given a  t1 of functions and a  t2$ of values, for all compound names v1 and v2, apply each function named by v1 in t1 to each value named by v2 in t2 and put the result into a new  under a name v1 ++ v2.&Given a  t of values and a function f$ that maps an arbitrary value to a , apply the function f to each value from t and $ the result.' Convert a  t to a % of compound names into value lists.( Convert a  to a list of path-value pairs.)(Convert a list of path-value pairs to a .*Map Nothing to  and Just t to t.+Map  to Nothing and a non-empty t to Just t., Convert a  into an ASCII-drawn tree.-ÄDecide if maps are equivalent up to a custom value equivalence predicate. True if and only if the maps have exactly the same names and, for each name, its values in the two maps are equivalent.  is missing this..[Check if two lists are equal as multisets, i.e. if they have equal numbers of equal values.954  !"#$%&'()*+,-6789./012/  !"#$%&'()*+,-.1  !"#$%&'()*+,.-654  !"#$%&'()*+,-6789./012:      !"#$%&'()*+,-./0123456789:;<=%multi-trie-0.1-C2KFO5fsRBC23qK7KRguzwData.MultiTrieDataMap MultiTrievalueschildrenempty singletonleafrepeat updateValuesaddValuenullsizeareEqualStrict areEqualWeakareEquivalentUpTosubnode subnodeUpdatesubnodeAddValuesubnodeReplace subnodeDelete subnodeUnitesubnodeIntersectfilterproject filterOnNamesfilterWithNamesmap mapWithNamemapManymapManyWithName mapOnListsmapOnListsWithName cartesianunionunions intersectionintersections1flattenapplybindtoMaptoListfromList fromMaybetoMaybedrawareMapsEquivalentUpTolistAsMultiSetEquals $fEqMultiTrie$fMonadMultiTrie$fApplicativeMultiTrie$fFunctorMultiTrie$fShowMultiTrie MultiTrieMap nullToEmptyzipContentsAndChildrentoTreelistAsMultiSetIntersection