在 Scala 中实现类型 class 实例定义的更好方法
Better way to implement type class instance definitions in Scala
是否有更好/更少的样板方法来实现 类 类型的实例?一个简单的例子:
trait Equal[A]{
def equals(a: A, b: A): Boolean = a ==b
}
object Equal{
def apply[A: Equal] = implicitly[Equal[A]]
implicit def IntEqual = new Equal[Int]{
def equal(a: Int, b: Int): Boolean = a == b
}
implicit def OptionEqual = new Equal[Option]{
def equal(a: Option, b: Option): Boolean = a == b
// Implicit instances for all desired types is tedious
}
定义一个将函数作为输入并为您创建类型类实例的方法:
def eqInstance[A](f: (A, A) => Boolean): Equal[A] = new Equal[A] {
def equal(a: A, b: A): Boolean = f(a,b)
}
那么你的类型类实例可以更简洁:
val intEqual = eqInstance[Int](_ == _)
是否有更好/更少的样板方法来实现 类 类型的实例?一个简单的例子:
trait Equal[A]{
def equals(a: A, b: A): Boolean = a ==b
}
object Equal{
def apply[A: Equal] = implicitly[Equal[A]]
implicit def IntEqual = new Equal[Int]{
def equal(a: Int, b: Int): Boolean = a == b
}
implicit def OptionEqual = new Equal[Option]{
def equal(a: Option, b: Option): Boolean = a == b
// Implicit instances for all desired types is tedious
}
定义一个将函数作为输入并为您创建类型类实例的方法:
def eqInstance[A](f: (A, A) => Boolean): Equal[A] = new Equal[A] {
def equal(a: A, b: A): Boolean = f(a,b)
}
那么你的类型类实例可以更简洁:
val intEqual = eqInstance[Int](_ == _)