Referencing Overloaded Method


#1

I’d like to get a reference to an overloaded math class

Given the following

def something[T](x: List[Number[T]]) = ???

I’d like to locate the correct math.max method for a Number of type T.
I’m aware that I could simply pull the first element out, get it’s type and use reflection to find the correct method. It just seems ugly. I also understand that due to type erasure of T that it’s not going to be but so elegant.

Any ideas?


#2

If you wish to abstract over numeric types you probably want a typeclass. It’s possible that the built-in Numeric is sufficient, depending on what you’re up to. A generic sum method using Numeric might look like this.

def sum[A](as: List[A])(implicit ev: Numeric[A]): A =
  as.foldRight(ev.zero)(ev.plus) 

And then you would get the proper return type and everything’s good.

@ sum(List(1,2,3)) 
res6: Int = 6

@ sum(List(1.2, 3.4, 5.6)) 
res7: Double = 10.2