Scala: checking if an object is Numeric
numeric, scala, typeclass
Solution
The original problem is not solvable, and here is my reasoning why:
To find out whether a type is an instance of a typeclass (such as Numeric), we need implicit resolution. Implicit resolution is done at compile time, but we would need it to be done at runtime. That is currently not possible, because as far as I can tell, the Scala compiler does not leave all necessary information in the compiled class file. To see that, one can write a test class with a method that contains a local variable, that has the implicit modifier. The compilation output will not change when the modifier is removed.
Problem
Is it possible for a pattern match to detect if something is a `Numeric`? I want to do the following: ``` class DoubleWrapper(value: Double) { override def equals(o: Any): Boolean = o match { case o: Numeric => value == o.toDouble case _ => false } override def hashCode(): Int = value ## } ``` But of course this doesn't really work because `Numeric` isn't the supertype of things like `Int` and `Double`, it's a typeclass. I also can't do something like `def equals[N: Numeric](o: N)` because `o` has to be `Any` to fit the contract for `equals`. So how do I do it without listing out every known `Numeric` class (including, I guess, user-defined classes I may not even know about)?