Is there an extension method in cats for the standard Set which converts it to Option[cats.data.NonEmptySet]?
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).
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With