cleaner typeclass instances for `Fractional`
Closed this issue · 1 comments
I need a clean way to express the following ideas for spire types, via typeclasses:
- Some types are "fractional" - they can approximate all their answers "closely" (for some value of "close") in a fractional way:
- Float
- Double
- Rational
- BigDecimal
- Algebraic
- Real
- for all native and spire types that are fractional, one can compute a "good" approximation (again, for some value of "good") for
fpow
andnroot
I think a clean way to do this would be to simply define actual typeclass instances of Fractional
for all these types. That gives library users a clean way to say either using NRoot
or using Fractional
in their signatures.
Currently spire provides literally no usable typeclass instance of NRoot[Rational]
, even though it provides instances for several integral types like NRoot[Int]
, which doesn't seem numerically safe at all!
There are also currently no typeclass instances that allow one to "filter" on numeric types that actually are fractional. I should be able to say things like using Fractional[V]
and have this be satisfiable for Float, Double, Rational, BigDecimal, etc. Currently that doesn't seem possible.
This should give me what I want, thanks @armanbilge
spire/core/src/main/scala/spire/math/Fractional.scala
Lines 25 to 30 in 1006dbf