Scala implicit Numeric[T] в сопутствующем объекте

У меня есть следующий общий Interval class (любезно сформулировано для меня пользователем soc):

case class Interval[T](from: T, to: T)(implicit num: Numeric[T]) {
  import num.mkNumericOps // allows us to write from.toDouble and to.toDouble
  def mid: Double = (from.toDouble + to.toDouble) / 2.0
}

Типичные варианты использования: Interval[Double] или Interval[Int]. Чтобы добавить бинарные операторы unionи пересечения, я следовал аналогичному шаблону с (неявное число: Numeric[T])в сопутствующем объекте:

object Interval {

  def union[T](interval1: Interval[T], interval2: Interval[T])(implicit num: Numeric[T]) = {
    import num.mkOrderingOps // allows interval1.from min
    Interval[T](interval1.from min interval2.from, interval1.to max interval2.to)
  }

  def intersect[T](interval1: Interval[T], interval2: Interval[T])(implicit num: Numeric[T]) = {
    import num.mkOrderingOps
    Interval[T](interval1.from max interval2.from, interval1.to min interval2.to)
  }

}  

It's ugly шаблон для копирования (неявное число: Numeric[T])и import num.mkOrderingOpsвнутри обоих методов. Есть ли способ сделать это только один раз, на уровне самого объекта Interval?

6
задан Perfect Tiling 13 May 2012 в 07:17
поделиться