[{"name":"ID","comment":"\nModule in which the base ID type is defined\n\n# Types\n@docs ID, Counter, Dict, Set, CounterDict\n\n# Functions\n@docs toString, debugID\n\n# Parser\n@docs parser\n\n# Json\n@docs encode, decoder\n","unions":[],"aliases":[{"name":"Counter","comment":" Alias for [`ID.Counter.Counter`](ID.Counter#Counter) ","args":["id"],"type":"ID.Counter.Counter id"},{"name":"CounterDict","comment":" Alias for [`ID.CounterDict.CounterDict`](ID.CounterDict#CounterDict) ","args":["id","value"],"type":"ID.CounterDict.CounterDict id value"},{"name":"Dict","comment":" Alias for [`ID.Dict.Dict`](ID.Dict#Dict) ","args":["id","value"],"type":"ID.Dict.Dict id value"},{"name":"ID","comment":" The basis for making a ID type, has one generic type argument which should be an internal type to the module the ID type is defined in.\n\n    module UserID exposing(ID)\n\n    import ID\n\n    type alias ID = ID.ID IDInternal\n\n    type IDInternal = IDInternal\n","args":["a"],"type":"Internal.ID a"},{"name":"Set","comment":" Alias for [`ID.Set.Set`](ID.Set#Set) ","args":["id"],"type":"ID.Set.Set id"}],"values":[{"name":"debugID","comment":" Create an ID with an arbitrary value for debugging purposes. Requires 'Debug.todo' as a first argument ","type":"(String.String -> Basics.Never) -> Basics.Int -> ID.ID a"},{"name":"decoder","comment":" JSON Decoder for `ID` ","type":"Json.Decode.Decoder (ID.ID a)"},{"name":"encode","comment":" Encode `ID` to a JSON value ","type":"ID.ID a -> Json.Encode.Value"},{"name":"parser","comment":" Parser for 'ID' ","type":"Parser.Parser (ID.ID a)"},{"name":"toString","comment":" Converts an ID into a string representing the number inside the ID ","type":"ID.ID a -> String.String"}],"binops":[]},{"name":"ID.Counter","comment":"\n\n@docs Counter\n@docs new, newID, newID2, newID3, newID4, giveIDs\n@docs accountForID, accountForIDs, accountForItemIDs, accountForDictIDs\n@docs sanitizeIDs\n\n# Json\n@docs encode, decoder\n\n","unions":[],"aliases":[{"name":"Counter","comment":"\nCounter type which is used to create [`ID`](ID#ID) values\n","args":["id"],"type":"Internal.Counter id"}],"values":[{"name":"accountForDictIDs","comment":" Same as [`accountForIDs`](ID.Counter#accountForIDs) but can be used with a [`Dict`](ID.Dict#Dict) ","type":"Internal.Dict counter (Internal.ID a) value -> ID.Counter.Counter (Internal.ID a) -> ID.Counter.Counter (Internal.ID a)"},{"name":"accountForID","comment":"\nAccount for a single IDs.\nThis should not be necessary if you always make sure to use the counter result from [`newID`](ID.Counter#newID), but can be used to sanitize the counter after encoding and decoding a counter and values\n","type":"Internal.ID a -> ID.Counter.Counter (Internal.ID a) -> ID.Counter.Counter (Internal.ID a)"},{"name":"accountForIDs","comment":"\nAccount for a list of IDs.\nThis should not be necessary if you always make sure to use the counter result from [`newID`](ID.Counter#newID), but can be used to sanitize the counter after encoding and decoding a counter and values\n","type":"List.List (Internal.ID a) -> ID.Counter.Counter (Internal.ID a) -> ID.Counter.Counter (Internal.ID a)"},{"name":"accountForItemIDs","comment":"\nSame as [`accountForIDs`](ID.Counter#accountForIDs) but can be used for a list of values containing an [`ID`](ID#ID)\n\n    newCounter = accountForItemIDs .id users counter\n","type":"(item -> Internal.ID a) -> List.List item -> ID.Counter.Counter (Internal.ID a) -> ID.Counter.Counter (Internal.ID a)"},{"name":"decoder","comment":" JSON Decoder for 'Counter' ","type":"Json.Decode.Decoder (ID.Counter.Counter id)"},{"name":"encode","comment":" Encode 'Counter' to a JSON value ","type":"ID.Counter.Counter id -> Json.Encode.Value"},{"name":"giveIDs","comment":" Assign IDs to a number of values, make sure to use the new counter to create any new IDs ","type":"(Internal.ID a -> b -> c) -> ID.Counter.Counter (Internal.ID a) -> List.List b -> ( List.List c, ID.Counter.Counter (Internal.ID a) )"},{"name":"new","comment":" Create a new counter ","type":"a -> ID.Counter.Counter (Internal.ID a)"},{"name":"newID","comment":"  Creates a new [`ID`](ID#ID) and advanced the counter, make sure to use the new counter to create any new IDs ","type":"ID.Counter.Counter (Internal.ID a) -> ( Internal.ID a, ID.Counter.Counter (Internal.ID a) )"},{"name":"newID2","comment":" Same as [`newID`](ID.Counter#newID) but creates 2 IDs instead of 1 ","type":"ID.Counter.Counter (Internal.ID a) -> ( Internal.ID a, Internal.ID a, ID.Counter.Counter (Internal.ID a) )"},{"name":"newID3","comment":" Same as [`newID`](ID.Counter#newID) but creates 3 IDs instead of 1 ","type":"ID.Counter.Counter (Internal.ID a) -> ( { id1 : Internal.ID a, id2 : Internal.ID a, id3 : Internal.ID a }, ID.Counter.Counter (Internal.ID a) )"},{"name":"newID4","comment":" Same as [`newID`](ID.Counter#newID) but creates 4 IDs instead of 1 ","type":"ID.Counter.Counter (Internal.ID a) -> ( { id1 : Internal.ID a, id2 : Internal.ID a, id3 : Internal.ID a, id4 : Internal.ID a }, ID.Counter.Counter (Internal.ID a) )"},{"name":"sanitizeIDs","comment":" Account for all used IDs in the counter (as in [`accountForIDs`](ID.Counter#accountForIDs)) and give new IDs to any items that have a duplicate [`ID`](ID#ID) ","type":"(val -> Internal.ID a) -> (val -> Internal.ID a -> val) -> List.List val -> ID.Counter.Counter (Internal.ID a) -> ( List.List val, ID.Counter.Counter (Internal.ID a) )"}],"binops":[]},{"name":"ID.CounterDict","comment":"\n@docs CounterDict\n\nMost of the functions in this module are a alias for the same function in [`ID.Dict`](ID.Dict), which can handle both 'ID.Dict' and 'ID.CounterDict'\n\n@docs empty, singleton, fromList, toList\n@docs isEmpty, size\n@docs member, get, getFrom\n@docs add, insert, remove, update\n@docs map, filter, filterMap, fold\n@docs ids, values\n@docs partition, diff, intersect, union\n@docs map2, map3, map4\n\n# Json\n@docs encode, decoder\n","unions":[],"aliases":[{"name":"CounterDict","comment":" A dictionary with counter ","args":["id","value"],"type":"Internal.Dict Basics.Never id value"}],"values":[{"name":"add","comment":" Add a value to the Dictionary and assign it a new [`ID`](ID#ID). ","type":"value -> ID.CounterDict.CounterDict (Internal.ID a) value -> ( Internal.ID a, ID.CounterDict.CounterDict (Internal.ID a) value )"},{"name":"decoder","comment":" JSON Decoder for `SetCounterDict ","type":"Json.Decode.Decoder value -> Json.Decode.Decoder (ID.CounterDict.CounterDict (Internal.ID id) value)"},{"name":"diff","comment":" Keep a ID-value pair when its ID does not appear in the second dictionary. ","type":"ID.CounterDict.CounterDict (Internal.ID a) b -> Internal.Dict counter (Internal.ID a) c -> ID.CounterDict.CounterDict (Internal.ID a) b"},{"name":"empty","comment":" Create a empty `CounterDict` ","type":"Internal.Counter (Internal.ID a) -> ID.CounterDict.CounterDict (Internal.ID a) value"},{"name":"encode","comment":" Encode `CounterDict` to a JSON value ","type":"(value -> Json.Decode.Value) -> ID.CounterDict.CounterDict (Internal.ID id) value -> Json.Encode.Value"},{"name":"filter","comment":" Keep only the ID-value pairs that pass the given test. ","type":"(Internal.ID a -> value -> Basics.Bool) -> ID.CounterDict.CounterDict (Internal.ID a) value -> ID.CounterDict.CounterDict (Internal.ID a) value"},{"name":"filterMap","comment":" Apply a function to all values in the dictionary and filter out the values that return Nothing. ","type":"(Internal.ID a -> b -> Maybe.Maybe c) -> ID.CounterDict.CounterDict (Internal.ID a) b -> ID.CounterDict.CounterDict (Internal.ID a) c"},{"name":"fold","comment":" Fold over the ID-value pairs in a dictionary from lowest ID to highest ID. ","type":"(Internal.ID a -> value -> c -> c) -> c -> ID.CounterDict.CounterDict (Internal.ID a) value -> c"},{"name":"fromList","comment":" Create a new `CounterDict` from a list of values and assign an [`ID`](ID#ID) to every value ","type":"Internal.Counter (Internal.ID a) -> List.List value -> ID.CounterDict.CounterDict (Internal.ID a) value"},{"name":"get","comment":" Get the value associated with a ID. If the ID is not found, return Nothing. ","type":"Internal.ID a -> ID.CounterDict.CounterDict (Internal.ID a) value -> Maybe.Maybe value"},{"name":"getFrom","comment":" Same as [get](ID.Dict#get) but with the arguments swapped, useful for pipelines. ","type":"ID.CounterDict.CounterDict (Internal.ID a) value -> Internal.ID a -> Maybe.Maybe value"},{"name":"ids","comment":" Get all of the IDs in a dictionary, sorted from lowest to highest. ","type":"ID.CounterDict.CounterDict (Internal.ID a) value -> List.List (Internal.ID a)"},{"name":"insert","comment":" Insert a ID-value pair into a dictionary. Replaces value when there is a collision. ","type":"Internal.ID a -> value -> ID.CounterDict.CounterDict (Internal.ID a) value -> ID.CounterDict.CounterDict (Internal.ID a) value"},{"name":"intersect","comment":" Keep a ID-value pair when its ID appears in the second dictionary. Preference is given to values in the first dictionary. ","type":"ID.CounterDict.CounterDict (Internal.ID a) b -> Internal.Dict counter (Internal.ID a) c -> ID.CounterDict.CounterDict (Internal.ID a) b"},{"name":"isEmpty","comment":" Determine if a dictionary is empty. ","type":"ID.CounterDict.CounterDict (Internal.ID a) value -> Basics.Bool"},{"name":"map","comment":" Apply a function to all values in a dictionary. ","type":"(Internal.ID a -> b -> c) -> ID.CounterDict.CounterDict (Internal.ID a) b -> ID.CounterDict.CounterDict (Internal.ID a) c"},{"name":"map2","comment":" Apply a function to values that appear in both dictionaries and create a new dictionary with the results, values that don't appear in all dictionaries are skipped. ","type":"(Internal.ID a -> b -> c -> d) -> ID.CounterDict.CounterDict (Internal.ID a) b -> Internal.Dict c2 (Internal.ID a) c -> ID.CounterDict.CounterDict (Internal.ID a) d"},{"name":"map3","comment":" Same as [`ID.Dict.map2`](ID.Dict#map2) but for 3 dictionaries ","type":"(Internal.ID a -> b -> c -> d -> e) -> ID.CounterDict.CounterDict (Internal.ID a) b -> Internal.Dict c2 (Internal.ID a) c -> Internal.Dict c3 (Internal.ID a) d -> ID.CounterDict.CounterDict (Internal.ID a) e"},{"name":"map4","comment":" Same as [`ID.Dict.map2`](ID.Dict#map2) but for 4 dictionaries ","type":"(Internal.ID a -> b -> c -> d -> e -> f) -> ID.CounterDict.CounterDict (Internal.ID a) b -> Internal.Dict c2 (Internal.ID a) c -> Internal.Dict c3 (Internal.ID a) d -> Internal.Dict c4 (Internal.ID a) e -> ID.CounterDict.CounterDict (Internal.ID a) f"},{"name":"member","comment":" Determine if a ID is in a dictionary. ","type":"Internal.ID a -> ID.CounterDict.CounterDict (Internal.ID a) value -> Basics.Bool"},{"name":"partition","comment":"\nPartition a dictionary according to some test.\nThe first dictionary contains all ID-value pairs which passed the test, and the second contains the pairs that did not.\nThe first dictionary retains the ID counter while the second is turned into a [`ID.Dict`](ID.Dict)\n","type":"(Internal.ID a -> value -> Basics.Bool) -> ID.CounterDict.CounterDict (Internal.ID a) value -> ( ID.CounterDict.CounterDict (Internal.ID a) value, ID.Dict.Dict (Internal.ID a) value )"},{"name":"remove","comment":" Remove a ID-value pair from a dictionary. If the ID is not found, no changes are made. ","type":"Internal.ID a -> ID.CounterDict.CounterDict (Internal.ID a) value -> ID.CounterDict.CounterDict (Internal.ID a) value"},{"name":"singleton","comment":" Create a 'CounterDict' with a single ID-value pair ","type":"Internal.Counter (Internal.ID a) -> value -> ( Internal.ID a, ID.CounterDict.CounterDict (Internal.ID a) value )"},{"name":"size","comment":" Determine the number of ID-value pairs in the dictionary. ","type":"ID.CounterDict.CounterDict (Internal.ID a) value -> Basics.Int"},{"name":"toList","comment":" Convert a dictionary into an list of ID-value pairs, sorted by IDs. ","type":"ID.CounterDict.CounterDict (Internal.ID a) value -> List.List ( Internal.ID a, value )"},{"name":"union","comment":" Combine two dictionaries. If there is a collision, preference is given to the first dictionary. ","type":"Internal.Dict counter (Internal.ID a) value -> ID.CounterDict.CounterDict (Internal.ID a) value -> ID.CounterDict.CounterDict (Internal.ID a) value"},{"name":"update","comment":" Update the value of a dictionary for a specific ID with a given function. If the ID is not found, no changes are made. ","type":"Internal.ID a -> (value -> value) -> ID.CounterDict.CounterDict (Internal.ID a) value -> ID.CounterDict.CounterDict (Internal.ID a) value"},{"name":"values","comment":" Get all of the values in a dictionary, in the order of their IDs. ","type":"ID.CounterDict.CounterDict (Internal.ID a) value -> List.List value"}],"binops":[]},{"name":"ID.Dict","comment":"\n@docs Dict\n\n@docs empty, singleton, fromList, toList\n@docs isEmpty, size\n@docs member, get, getFrom\n@docs insert, remove, update\n@docs map, filter, filterMap, fold\n@docs ids, values\n@docs partition\n@docs diff, intersect, union\n@docs map2, map3, map4\n\n# Json\n@docs encode, decoder\n","unions":[],"aliases":[{"name":"Dict","comment":" A [`Dict`](https://package.elm-lang.org/packages/elm/core/latest/Dict#Dict) for [`ID`](ID#ID)-value pairs ","args":["id","value"],"type":"Internal.Dict () id value"}],"values":[{"name":"decoder","comment":" JSON Decoder for [`Dict`](ID.Dict#Dict) ","type":"Json.Decode.Decoder value -> Json.Decode.Decoder (ID.Dict.Dict id value)"},{"name":"diff","comment":" Keep a ID-value pair when its ID does not appear in the second dictionary. ","type":"Internal.Dict counter1 (Internal.ID a) b -> Internal.Dict counter2 (Internal.ID a) c -> Internal.Dict counter1 (Internal.ID a) b"},{"name":"empty","comment":" Create a empty [`Dict`](ID.Dict#Dict) ","type":"ID.Dict.Dict (Internal.ID a) value"},{"name":"encode","comment":" Encode a [`Dict`](ID.Dict#Dict) to a JSON value ","type":"(value -> Json.Encode.Value) -> ID.Dict.Dict id value -> Json.Encode.Value"},{"name":"filter","comment":" Keep only the ID-value pairs that pass the given test. ","type":"(Internal.ID a -> value -> Basics.Bool) -> Internal.Dict counter (Internal.ID a) value -> Internal.Dict counter (Internal.ID a) value"},{"name":"filterMap","comment":" Apply a function to all values in the dictionary and filter out the values that return Nothing. ","type":"(Internal.ID a -> b -> Maybe.Maybe c) -> Internal.Dict counter (Internal.ID a) b -> Internal.Dict counter (Internal.ID a) c"},{"name":"fold","comment":" Fold over the ID-value pairs in a dictionary from lowest ID to highest ID. ","type":"(Internal.ID a -> value -> c -> c) -> c -> Internal.Dict counter (Internal.ID a) value -> c"},{"name":"fromList","comment":" Convert an list of ID-value pairs into a dictionary. ","type":"List.List ( Internal.ID a, value ) -> ID.Dict.Dict (Internal.ID a) value"},{"name":"get","comment":" Get the value associated with a ID. If the ID is not found, return Nothing. ","type":"Internal.ID a -> Internal.Dict counter (Internal.ID a) value -> Maybe.Maybe value"},{"name":"getFrom","comment":" Same as [get](ID.Dict#get) but with the arguments swapped, useful for pipelines. ","type":"Internal.Dict counter (Internal.ID a) value -> Internal.ID a -> Maybe.Maybe value"},{"name":"ids","comment":" Get all of the IDs in a dictionary, sorted from lowest to highest. ","type":"Internal.Dict counter (Internal.ID a) value -> List.List (Internal.ID a)"},{"name":"insert","comment":" Insert a ID-value pair into a dictionary. Replaces value when there is a collision. ","type":"Internal.ID a -> value -> Internal.Dict counter (Internal.ID a) value -> Internal.Dict counter (Internal.ID a) value"},{"name":"intersect","comment":" Keep a ID-value pair when its ID appears in the second dictionary. Preference is given to values in the first dictionary. ","type":"Internal.Dict counter1 (Internal.ID a) b -> Internal.Dict counter2 (Internal.ID a) c -> Internal.Dict counter1 (Internal.ID a) b"},{"name":"isEmpty","comment":" Determine if a dictionary is empty. ","type":"Internal.Dict counter (Internal.ID a) value -> Basics.Bool"},{"name":"map","comment":" Apply a function to all values in a dictionary. ","type":"(Internal.ID a -> b -> c) -> Internal.Dict counter (Internal.ID a) b -> Internal.Dict counter (Internal.ID a) c"},{"name":"map2","comment":" Apply a function to values that appear in both dictionaries and create a new dictionary with the results, values that don't appear in all dictionaries are skipped. ","type":"(Internal.ID a -> b -> c -> d) -> Internal.Dict c1 (Internal.ID a) b -> Internal.Dict c2 (Internal.ID a) c -> ID.Dict.Dict (Internal.ID a) d"},{"name":"map3","comment":" Same as [`ID.Dict.map2`](ID.Dict#map2) but for 3 dictionaries ","type":"(Internal.ID a -> b -> c -> d -> e) -> Internal.Dict c1 (Internal.ID a) b -> Internal.Dict c2 (Internal.ID a) c -> Internal.Dict c3 (Internal.ID a) d -> ID.Dict.Dict (Internal.ID a) e"},{"name":"map4","comment":" Same as [`ID.Dict.map2`](ID.Dict#map2) but for 4 dictionaries ","type":"(Internal.ID a -> b -> c -> d -> e -> f) -> Internal.Dict c1 (Internal.ID a) b -> Internal.Dict c2 (Internal.ID a) c -> Internal.Dict c3 (Internal.ID a) d -> Internal.Dict c4 (Internal.ID a) e -> ID.Dict.Dict (Internal.ID a) f"},{"name":"member","comment":" Determine if a ID is in a dictionary. ","type":"Internal.ID a -> Internal.Dict counter (Internal.ID a) value -> Basics.Bool"},{"name":"partition","comment":" Partition a dictionary according to some test. The first dictionary contains all ID-value pairs which passed the test, and the second contains the pairs that did not. ","type":"(Internal.ID a -> value -> Basics.Bool) -> Internal.Dict counter (Internal.ID a) value -> ( ID.Dict.Dict (Internal.ID a) value, ID.Dict.Dict (Internal.ID a) value )"},{"name":"remove","comment":" Remove a ID-value pair from a dictionary. If the ID is not found, no changes are made. ","type":"Internal.ID a -> Internal.Dict counter (Internal.ID a) value -> Internal.Dict counter (Internal.ID a) value"},{"name":"singleton","comment":" Create a dictionary with a single ID-value pair ","type":"Internal.ID a -> value -> ID.Dict.Dict (Internal.ID a) value"},{"name":"size","comment":" Determine the number of ID-value pairs in the dictionary. ","type":"Internal.Dict counter (Internal.ID a) value -> Basics.Int"},{"name":"toList","comment":" Convert a dictionary into an list of ID-value pairs, sorted by IDs. ","type":"Internal.Dict counter (Internal.ID a) value -> List.List ( Internal.ID a, value )"},{"name":"union","comment":" Combine two dictionaries. If there is a collision, preference is given to the first dictionary. ","type":"Internal.Dict counter1 (Internal.ID a) value -> Internal.Dict counter2 (Internal.ID a) value -> ID.Dict.Dict (Internal.ID a) value"},{"name":"update","comment":" Update the value of a dictionary for a specific ID with a given function. If the ID is not found, no changes are made. ","type":"Internal.ID a -> (value -> value) -> Internal.Dict counter (Internal.ID a) value -> Internal.Dict counter (Internal.ID a) value"},{"name":"values","comment":" Get all of the values in a dictionary, in the order of their IDs. ","type":"Internal.Dict counter (Internal.ID a) value -> List.List value"}],"binops":[]},{"name":"ID.Set","comment":"\n@docs Set\n\n@docs empty, singleton, fromList, toList\n\n@docs isEmpty, size, member\n\n@docs insert, remove\n\n@docs filter, fold\n\n@docs partition, diff, intersect, union\n\n# Json\n@docs encode, decoder\n","unions":[],"aliases":[{"name":"Set","comment":" A set type for IDs, is equal to a [`ID.Dict`](ID.Dict#Dict) with empty tuples as values ","args":["id"],"type":"ID.Dict.Dict id ()"}],"values":[{"name":"decoder","comment":" JSON Decoder for [`Set`](ID.Set#Set) ","type":"Json.Decode.Decoder (ID.Set.Set id)"},{"name":"diff","comment":" Get the difference between the first set and the second. Keeps IDs that do not appear in the second set. ","type":"ID.Set.Set (Internal.ID a) -> ID.Set.Set (Internal.ID a) -> ID.Set.Set (Internal.ID a)"},{"name":"empty","comment":" Create a empty [`Dict`](ID.Dict#Dict) ","type":"ID.Set.Set (Internal.ID a)"},{"name":"encode","comment":" Encode [`Set`](ID.Set#Set) to a JSON value ","type":"ID.Set.Set id -> Json.Encode.Value"},{"name":"filter","comment":" Keep only the IDs that pass the given test. ","type":"(Internal.ID a -> Basics.Bool) -> ID.Set.Set (Internal.ID a) -> ID.Set.Set (Internal.ID a)"},{"name":"fold","comment":" Fold over the IDs in a set from lowest ID to highest ID. ","type":"(Internal.ID a -> c -> c) -> c -> ID.Set.Set (Internal.ID a) -> c"},{"name":"fromList","comment":" Create a set from a list of IDs ","type":"List.List (Internal.ID a) -> ID.Set.Set (Internal.ID a)"},{"name":"insert","comment":" Insert a ID into a set. ","type":"Internal.ID a -> ID.Set.Set (Internal.ID a) -> ID.Set.Set (Internal.ID a)"},{"name":"intersect","comment":" Get the intersection of two sets. Keeps IDs that appear in both sets. ","type":"ID.Set.Set (Internal.ID a) -> ID.Set.Set (Internal.ID a) -> ID.Set.Set (Internal.ID a)"},{"name":"isEmpty","comment":" Determine if a set is empty. ","type":"ID.Set.Set (Internal.ID a) -> Basics.Bool"},{"name":"member","comment":" Determine if a ID is in a set. ","type":"Internal.ID a -> ID.Set.Set (Internal.ID a) -> Basics.Bool"},{"name":"partition","comment":" Partition a set according to some test. The first set contains all IDs which passed the test, and the second contains the IDs that did not. ","type":"(Internal.ID a -> Basics.Bool) -> ID.Set.Set (Internal.ID a) -> ( ID.Set.Set (Internal.ID a), ID.Set.Set (Internal.ID a) )"},{"name":"remove","comment":" Remove a ID from a set. If the ID is not found, no changes are made. ","type":"Internal.ID a -> ID.Set.Set (Internal.ID a) -> ID.Set.Set (Internal.ID a)"},{"name":"singleton","comment":" Create a set with a single ID ","type":"Internal.ID a -> ID.Set.Set (Internal.ID a)"},{"name":"size","comment":" Determine the number of IDs in the set. ","type":"ID.Set.Set (Internal.ID a) -> Basics.Int"},{"name":"toList","comment":" Get all of the IDs in a set, sorted from lowest to highest. ","type":"ID.Set.Set (Internal.ID a) -> List.List (Internal.ID a)"},{"name":"union","comment":" Get the union of two sets. Keep all IDs. ","type":"ID.Set.Set (Internal.ID a) -> ID.Set.Set (Internal.ID a) -> ID.Set.Set (Internal.ID a)"}],"binops":[]}]