A Lamdera package. It is not on package.elm-lang.org: the Lamdera compiler provides it, from static.lamdera.com, so lamdera install works and elm install does not.
This package is a collection of various container-like data structures. Currently only SeqDict and SeqSet are included.
Install using lamdera install lamdera/containers.
These behave like Dict and Set with some important differences:
comparable keys, any equatable* Elm value can be used as a keytoList returns a list of key-value pairs in insertion order rather than being sorted by comparable keysfromList [ ("A", 1), ("B", 2) ] /= fromList [ ("B", 2), ("A", 1) ], use unorderedEquals if you want to check if two SeqDicts or SeqSets are equal regardless of insertion orderThis is similar to pzp1997/assoc-list, however unlike assoc-list,
SeqDict and SeqSet are backed by a hashmap meaning they have better asymptotic performance.
For example insertions are O(log(n)) rather than O(n) and fromList is O(n * log(n)) rather than O(n^2).
*Non-equatable Elm values are currently: functions, Bytes, Html, Json.Value, Task, Cmd, Sub, Never, Texture, Shader, and any datastructures containing these types.
See miniBill's comparison of Elm Dict implementations for a meta-analysis of implementation and performance characteristics.
The core implementation for SeqDict and SeqSet was written by Robin Hansen. Thanks to Ambue for sponsoring the work needed to get this integrated into Lamdera!
If you'd like to read about the trade-offs that were made when designing this package, check out this blog post!