y0hy0h/ordered-containers/2.0.0

NOTE: the latest version is 2.0.3

Renamed to j-maas/ordered-containers. That is where the repository lives now. It has not been published as a package under the new name.

Versions published as y0hy0h/ordered-containers still install under that name. 5 versions of 5 come from the new location (see their notes).

Rerouted (renamed, verified). The GitHub user or repository was renamed. The tag is still there, at the new name. The Lamdera package server serves a copy recovered from https://github.com/j-maas/ordered-containers.

What we checked: The repo moved to github.com/j-maas/ordered-containers and tag 2.0.0 is there; its commit bc7bed60a09d is from 2020-02-16 15:27 UTC, before the version was published (2020-02-16 15:31 UTC); elm.json is byte-identical to package.elm-lang.org's; the exposed modules match docs.json; the zip's SHA-1 is not the published one (GitHub's zip no longer comes out byte for byte the same), so the contents were checked instead.

The Lamdera compiler uses this copy and prints a one-line notice saying so. elm itself fails to download this version.

Details · package.elm-lang.org's zip: https://github.com/y0hy0h/ordered-containers/zipball/2.0.0/

ordered-containers

build status elm package

OrderedDict and OrderedSet that remember the order of insertion.

The default implementations, Dict and Set, do not keep track of their item's ordering. OrderedDict or OrderedSet, by contrast, will respect the insertion order when converting them to a List or iterating over their items (using foldlOrderedDict.foldl, foldrOrderedDict.foldr, or partitionOrderedDict.partition).

Examples

import OrderedSet
import Set

-- Remembers insertion order
OrderedSet.empty
    |> OrderedSet.insert 2
    |> OrderedSet.insert 1
    |> OrderedSet.insert 3
    |> OrderedSet.toList
--> [ 2, 1, 3 ]

-- Orders by keys
Set.empty
    |> Set.insert 2
    |> Set.insert 1
    |> Set.insert 3
    |> Set.toList
--> [ 1, 2, 3 ]
import Dict
import OrderedDict

-- Remembers insertion order
OrderedDict.empty
    |> OrderedDict.insert 3 "first"
    |> OrderedDict.insert 1 "second"
    |> OrderedDict.insert 2 "third"
    |> OrderedDict.toList
--> [ ( 3, "first" ), ( 1, "second" ), ( 2, "third" ) ]

-- Orders by keys
Dict.empty
    |> Dict.insert 3 "first"
    |> Dict.insert 1 "second"
    |> Dict.insert 2 "third"
    |> Dict.toList
--> [ ( 1, "second" ), ( 2, "third" ), ( 3, "first") ]

Comparison to Dict and Set

The API purposely includes all functions from the regular Dict and Set with the exception for the "Combine" functions (e.g., unionDict.union, diffDict.diff, etc.). Those are left out, because combining ordered collections does not have a single obvious solution. You can always write custom combination functions for your use case!

In addition to the regular API there is a method for efficiently converting back to a regular collection, namely OrderedDict.toDict and OrderedSet.toSet.

History and contributors

Originally, this package was based on rnon's ordered-containers and updated for Elm 0.19. Later, it was merged with wittjosiah's elm-ordered-dict and rewritten to handle re-insertion in a clearly documented way.