scalaで行列(1)

scalaで行列演算のプログラムを書いているのですがなかなかうまくいきません。
mop という2項演算子を引数に取って各要素ごとに演算を実行するメソッドを作ったのですが、それを使って+をうまく定義できないところで躓いてます。
どこが悪いかわかる方はコメントをいただけると助かります。


matC=matA. mop( matB) (_ + _)                          //動く
def +(that: Matrix[T]) = this.mop(that)(_ + _)                 //動かない
matC = matA + matB 


package mnru.matrix


object MatrixField {
  type F[T] = (T, T) => T
  type M[T] = List[List[T]]


  class Matrix[T](val elms: M[T]) {

    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)(_ + _)


  }


  val matA = new Matrix[Int](List(1 :: 2 :: 3 :: Nil, 4 :: 5 :: 6 :: Nil))
  val matB = new Matrix[Int](List(7 :: 8 :: 9 :: Nil, 10 :: 11 :: 12 :: Nil))
  val matC=matA. mop( matB) (_ + _)                   //動く
  //val matC = matA + matB              //動かない 


  def main(args: Array[String]) {

    println(matC)
  }


}