Skip to content

Commit

Permalink
version 0.4.1
Browse files Browse the repository at this point in the history
  • Loading branch information
antognini committed Jul 12, 2023
1 parent bda1f85 commit 51e98a8
Show file tree
Hide file tree
Showing 6 changed files with 16 additions and 31 deletions.
6 changes: 3 additions & 3 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ This library requires **[Scala 3.3](https://scala-lang.org/blog/2023/05/30/scala

Include the library dependency in your `build.sbt` and enable strict equality:
```scala
libraryDependencies += "ch.produs" %% "type-safe-equality" % "0.4.0"
libraryDependencies += "ch.produs" %% "type-safe-equality" % "0.4.1"

scalacOptions += "-language:strictEquality"
scalacOptions += "-Yimports:scala,scala.Predef,java.lang,equality.all"
Expand Down Expand Up @@ -151,7 +151,7 @@ SomeProduct() == SomeProduct()

Assumed equality for the bottom classes of a class hierarchy via type class derivation:
```scala
abstract class Animal
class Animal
case class Cat() extends Animal derives Eq.assumed
case class Dog() extends Animal derives Eq.assumed

Expand All @@ -162,7 +162,7 @@ case class Dog() extends Animal derives Eq.assumed

Assumed equality for the base class of a class hierarchy via type class derivation:
```scala
abstract class Animal derives Eq.assumed
class Animal derives Eq.assumed
case class Cat() extends Animal
case class Dog() extends Animal

Expand Down
2 changes: 1 addition & 1 deletion build.sbt
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,7 @@ ThisBuild / organizationHomepage := None
ThisBuild / description := "Scala 3 type safe equality"
ThisBuild / homepage := Some(url("https://github.com/antognini/type-safe-equality"))
ThisBuild / licenses := Seq("Apache-2.0" -> url("https://www.apache.org/licenses/LICENSE-2.0"))
ThisBuild / version := "0.4.0"
ThisBuild / version := "0.4.1"
ThisBuild / scalaVersion := "3.3.0"
ThisBuild / versionScheme := Some("semver-spec")
ThisBuild / publishTo := sonatypePublishToBundle.value
Expand Down
9 changes: 2 additions & 7 deletions eq/src/main/scala/equality/Eq.scala
Original file line number Diff line number Diff line change
Expand Up @@ -17,8 +17,6 @@ sealed trait Eq[-T]:
*/
private[equality] val violations: Seq[String] = Nil

override def toString = "Eq.derived"

object Eq:
given eq_CanEqual[T: Eq]: CanEqual[T, T] = CanEqual.derived

Expand All @@ -31,16 +29,13 @@ object Eq:
object assumed extends assumed[Any]:
def derived[T]: assumed[T] = assumed

override def toString = "Eq.assumed"

/**
* Creates an Eq instance for an arbitrary type without verifying equality requirements.
*
* @see [[https://github.com/antognini/type-safe-equality/blob/main/README.md#assuming-equality Library documentation]]
* @tparam T arbitrary type
*/
sealed trait assumed[-T] extends Eq[T]:
override def toString = "Eq.assumed"
sealed trait assumed[-T] extends Eq[T]

/**
* Creates an Eq instance for a `Product` type while verifying equality requirements.
Expand All @@ -64,6 +59,6 @@ object Eq:
// For testing only
private[equality] def apply[T](violationSeq: Seq[String]): Eq[T] =
new Eq[T]:
override val violations: Seq[String] = violationSeq
override val violations = violationSeq

end Eq
15 changes: 8 additions & 7 deletions eq/src/main/scala/equality/EqRef.scala
Original file line number Diff line number Diff line change
@@ -1,14 +1,13 @@
package equality

import equality.Eq

import equality.all.{Eq, given}

/**
* Equality-safe reference comparison.
*
* @see [[https://github.com/antognini/type-safe-equality/tree/main#reference-equality Library documentation]]
*/
sealed trait EqRef[A <: AnyRef](
sealed class EqRef[A <: AnyRef] private (
private val a: Option[A]
) derives Eq.assumed:

Expand Down Expand Up @@ -50,13 +49,15 @@ sealed trait EqRef[A <: AnyRef](
a match
case Some(value) =>
val identity = System.identityHashCode(value)
s"EqRef($identity -> $value)"
f"EqRef($identity%x -> $value)"
case _ =>
s"EqRef"
"EqRef"

end EqRef

object EqRef:
def apply[A <: AnyRef]: EqRef[A] = new EqRef[A](None){}
def apply[A <: AnyRef](a: A): EqRef[A] = new EqRef[A](Some(a)){}
def apply[A <: AnyRef]: EqRef[A] = new EqRef[A](None)
def apply[A <: AnyRef](a: A): EqRef[A] = new EqRef[A](Some(a))

given [A <: AnyRef]: Eq[EqRef[A]] = Eq.assumed
end EqRef
11 changes: 0 additions & 11 deletions eq/src/test/scala/equality/OnEq.scala

This file was deleted.

4 changes: 2 additions & 2 deletions examples/src/main/scala/examples/Quickstart.scala
Original file line number Diff line number Diff line change
Expand Up @@ -91,7 +91,7 @@ def verified_equality_for_an_existing_arbitrary_class_with_a_given: Unit =
@nowarn
def assumed_equality_for_the_bottom_classes_of_a_class_hierarchy_via_type_class_derivation: Unit =

abstract class Animal
class Animal
case class Cat() extends Animal derives Eq.assumed
case class Dog() extends Animal derives Eq.assumed

Expand All @@ -103,7 +103,7 @@ def assumed_equality_for_the_bottom_classes_of_a_class_hierarchy_via_type_class_
@nowarn
def assumed_equality_for_the_base_class_of_a_class_hierarchy_via_type_class_derivation: Unit =

abstract class Animal derives Eq.assumed
class Animal derives Eq.assumed
case class Cat() extends Animal
case class Dog() extends Animal

Expand Down

0 comments on commit 51e98a8

Please sign in to comment.