Неявные классы типов def из других классов типов

Я хочу добавить новый класс неявного типа Divisible для каждого типа T, который уже имеет классы неявного типа Fractional или Integral.

Написанный мной код не компилируется:

object Divisible {

    implicit def fractionalDivisible[T](implicit frac: Fractional[T]): Divisible[T] = new Divisible[T] {
        override def div(x: T, y: T): T = frac.div(x, y)
    }

    implicit def fractionalDivisible[T](implicit integral: Integral[T]): Divisible[T]  = new Divisible[T] {
        override def div(x: T, y: T): T = integral.quot(x, y)
    }
}

trait Divisible[T] {
    def div(x: T, y: T): T
}

object Example extends App{

    def foo[T](x: T, y: T)(implicit div: Divisible[T]) = div.div(x, y)

    println(foo(1.0, 2.0))
}

Я получаю следующую ошибку:

не удалось найти неявное значение для параметра div: core.common.Divisible [Double]

Если, с другой стороны, я перемещаю неявное определение в приложение, оно компилируется.

Как я могу помочь компилятору найти неявное определение в сопутствующем объекте Divisible?

Изменить: в этом вопросе была ошибка.


person Mishael Rosenthal    schedule 19.05.2015    source источник


Ответы (1)


измените имя одной из ваших неявных функций, чтобы они не назывались обеими: FractionalDivisible

person Meir Maor    schedule 19.05.2015
comment
Возможно, объясните, почему это имеет значение. - person Michael Zajac; 19.05.2015