Skip to content

eq typeclass #42

@swuecho

Description

@swuecho
trait Eq[A] {
  def eqv(x: A, y: A): Boolean
}

object EqInstances {
  implicit val intEq: Eq[Int] = new Eq[Int] {
    override def eqv(x: Int, y: Int): Boolean = x == y
  }

  implicit val stringEq: Eq[String] = new Eq[String] {
    override def eqv(x: String, y: String): Boolean = x == y
  }
}

object EqSyntax {
  implicit class EqOps[A](x: A) {
    def ===(y: A)(implicit eqInstance: Eq[A]): Boolean = eqInstance.eqv(x, y)
  }
}

object Main extends App {
  import EqInstances._
  import EqSyntax._

  val intResult: Boolean = 42 === 42
  val stringResult: Boolean = "hello" === "world"

  println(s"Int equality result: $intResult")
  println(s"String equality result: $stringResult")
}

Metadata

Metadata

Assignees

No one assigned

    Labels

    No labels
    No labels

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions