This library provides typeclass-based implementation of HashSet
and HashMap
data structures, both mutable and immutable, for Scala.
This library is based on the source code of the Scala standard library and is distributed under the same license. Thanks to all the original contributors!
Include the following line in your build.sbt
:
libraryDependencies += "com.github.tomasmikula" %% "hasheq" % "0.3"
To work with HashSet[A]
/HashMap[A]
from this library, you will need to define equality and hash-code for type A
via an (implicit) instance of Equal[A]
and Hash[A]
, respectively.
You may notice that the data structures in this library do not implement some common interface for sets/maps, such as scala.collection.Set
/scala.collection.Map
. To write generic code that doesn't care about the underlying implementation of set/map (such as HashSet
, ListSet
, TreeSet
, ...), you can
- use a type parameter
S[_]
and an (implicit) instance ofSetRepr[S, A]
to abstract over set implementation; - use a type parameter
M[_, _]
and an (implicit) instance ofMapRepr[M, K]
to abstract over map implementation.
Data structures in this library are equivalence aware. It is a type error to mix up two data structures that use a different equivalence relation on their elements. Read more about equivalence versus equality.
This is work in progress. Both HashSet
and HashMap
, mutable and immutable, have been ported from the Scala standard library (equals
/hashCode
-based) to typeclass-style. However, currently only immutable.HashSet
is tested for correctness. Before using the others in production, you might want to contribute tests for them. Also, only immutable.HashSet
is currently parametric in the equivalence used (the others require equality; see Equivalence-awareness above).