All Downloads are FREE. Search and download functionalities are using the official Maven repository.

org.manatki.derevo.catsInstances.eq.scala Maven / Gradle / Ivy

There is a newer version: 0.11.6
Show newest version
package org.manatki.derevo.catsInstances
import cats.{Eq, Show}
import magnolia.{CaseClass, Magnolia, SealedTrait}
import org.manatki.derevo.Derivation

object eq extends Derivation[Eq] {
  type Typeclass[T] = Eq[T]

  def combine[T](ctx: CaseClass[Eq, T]): Eq[T] = new Eq[T] {
    override def eqv(x: T, y: T): Boolean =
      ctx.parameters.forall { p =>
        p.typeclass.eqv(p.dereference(x), p.dereference(y))
      }
  }

  def dispatch[T](ctx: SealedTrait[Eq, T]): Eq[T] =
    new Eq[T] {
      override def eqv(x: T, y: T): Boolean =
        ctx.dispatch(x) { sub =>
          sub.cast.isDefinedAt(y) && sub.typeclass.eqv(sub.cast(x), sub.cast(y))
        }
    }

  implicit def instance[T]: Eq[T] = macro Magnolia.gen[T]
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy