Проблема в том, что T
может не иметь добавления. Поэтому, когда у вас есть конкретная матрица - одна из Ints - тогда mop
знает, что делать. Но общий код не работает.
Вы можете использовать неявное Numeric
для предоставления числовых операций для T
(если они существуют):
class Matrix[T](val elms: M[T])(implicit nt: Numeric[T]) {
import nt._
override def toString()= (this.elms map (_.mkString("[", ",", "]"))).mkString("\n")
def mop(that: Matrix[T])(op: F[T]): Matrix[T] =
new Matrix[T](((this.elms zip that.elms).map(t => ((t._1 zip t._2)).map(s => op(s._1, s._2)))))
def +(that: Matrix[T]) = this.mop(that)(_ + _)
}