Scala параметризованные методы и арифметические операции

Я пытаюсь получить простую функциональность для работы, где у меня есть список списков, и я хочу сделать некоторые математические операции над данными (-, +, *,/). Я хочу, чтобы метод использовал любой из следующих типов (Int, Float, Double).

вот что я пробовал:

def doSomething[T](data: List[T]){
 data reduceLeft(_ / _)
}

отображается следующее: значение/не является членом параметра типа T.

Как мне заставить это работать для типов AnyVal (Double, Int, Float)?

Обновление Я попытался реализовать предложение в следующем коде:

def dot[T](l: List[List[T]])(implicit num: Numeric[T]) = 
{

    for (row <- data)
        yield for(col <- l)
            yield row zip col map {a => num.times(a._1 , a._2)}   reduceLeft (_+_)

и получить ошибку: type mismatch; найдено: a._1.type(с базовым типом T): T

Есть ли способ обойти это?

Ответы

Ответ 1

Для деления:

def foo[T](l: List[T])(implicit num: Numeric[T]) = num match{
     case i: Integral[_] => l reduceLeft (i.quot(_, _))
     case fr: Fractional[_] => l reduceLeft (fr.div(_, _))}

Для +, - и * это проще (plus, minus, times соответственно):

def foo[T](l: List[T])(implicit num: Numeric[T]) = l reduceLeft (num.plus(_, _))