Вы можете сделать это (с большим количеством занятой работы), создав неявные операторы:
abstract class Arith[A,B,C] {
def +(a: A, b: B): C
def -(a: A, b: B): C
def *(a: A, b: B): C
def /(a: A, b: B): C
}
implicit object ArithIntLong extends Arith[Int,Long,Long] {
def +(a: Int, b: Long) = a+b
def -(a: Int, b: Long) = a-b
def *(a: Int, b: Long) = a*b
def /(a: Int, b: Long) = a/b
}
...
def f[A,B,C](a: A, b: B)(implicit arith: Arith[A,B,C]) = arith.*(a,b)
scala> f(5,10L)
res46: Long = 50
но вам действительно нужно сделать больше, так как вам нужен числовой эквивалент только для A и B, и асимметричные операции должны быть определены в обоих направлениях. И не очень практично специализироваться, учитывая, что здесь задействованы три типа.