Is there an extension method in cats for the standard Set
which converts it to Option[cats.data.NonEmptySet]
?
Asked
Active
Viewed 1,877 times
8

Midiparse
- 4,701
- 7
- 28
- 48
1 Answers
10
Not for scala.collection.immutable.Set
, but for SortedSet
:
scala> import cats.syntax.set._
import cats.syntax.set._
scala> import scala.collection.immutable.SortedSet
import scala.collection.immutable.SortedSet
scala> SortedSet(1, 2, 3).toNes
res0: Option[cats.data.NonEmptySet[Int]] = Some(TreeSet(1, 2, 3))
You can of course convert an ordinary Set
:
scala> Set(1, 2, 3).to[SortedSet].toNes
res1: Option[cats.data.NonEmptySet[Int]] = Some(TreeSet(1, 2, 3))
Cats's NonEmptySet
isn't built on Set
(and Cats doesn't provide syntax for Set
) because Set
relies on universal equality to determine what counts as uniqueness for its elements. SortedSet
on the other hand requires a scala.math.Ordering
instance, which makes it more aligned with the design principles followed in Cats (see e.g. this issue for more discussion).

Travis Brown
- 138,631
- 12
- 375
- 680
-
Seems like another import is needed for the `.to[SortedSet]` call. – tilde Aug 09 '23 at 18:48