Open cquiroz opened 2 years ago
That second one should be import coulomb.ops.algebra.spire.all.given
Until I write some proper tutorials, the best reference on what imports should work is probably the unit tests:
https://github.com/erikerlandson/coulomb/blob/scala3/spire/src/test/scala/coulomb/quantity.scala#L20
Maybe it is related to Unitless. Here is a minimal reproduction
import coulomb.*
import coulomb.syntax.*
import algebra.instances.all.given
import coulomb.ops.algebra.spire.all.given
import coulomb.policy.spire.standard.given
import coulomb.units.si.*
import coulomb.units.si.given
import scala.math._
object ItcImpl2 {
val expTime: Quantity[BigDecimal, Second] = ???
val nExp = 1
val totalTime: Quantity[BigDecimal, Second] =
expTime * nExp.withUnit[Unitless]
}
With error:
[error] -- Error: /Users/carlos.quiroz/code/noirlab/lucuma-itc/modules/itc/src/main/scala/lucuma/itc/ItcImpl2.scala:22:37
[error] 22 | expTime * nExp.withUnit[Unitless]
[error] | ^
[error] |Multiplication not defined in scope for Quantity[BigDecimal, coulomb.units.si.Second] and Quantity[Int, (1 : Int)]
[error] |
[error] |One of the following imports might make progress towards fixing the problem:
[error] |
[error] | import coulomb.policy.spire.standard.ctx_mul_1V2U
[error] | import coulomb.policy.spire.standard.ctx_mul_2V2U
[error] | import coulomb.policy.spire.strict.ctx_mul_1V2U
[error] | import coulomb.policy.spire.strict.ctx_mul_2V2U
[error] | import coulomb.policy.standard.ctx_mul_1V2U
[error] | import coulomb.policy.standard.ctx_mul_2V2U
[error] | import coulomb.policy.strict.ctx_mul_1V2U
[error] | import coulomb.policy.strict.ctx_mul_2V2U
[error] | import shapeless.~?>.idKeyWitness
[error] | import shapeless.~?>.idValueWitness
[error]
@cquiroz I am failing to reproduce that error. I wrote this and it compiled with no errors, although it threw a bunch of warnings about Unitless
being deprecated
object repro {
import coulomb.*
import coulomb.syntax.*
import algebra.instances.all.given
import coulomb.ops.algebra.spire.all.given
import coulomb.policy.spire.standard.given
import coulomb.units.si.*
import coulomb.units.si.given
import scala.math._
object ItcImpl2 {
val expTime: Quantity[BigDecimal, Second] = BigDecimal(1).withUnit[Second]
val nExp = 1
val totalTime: Quantity[BigDecimal, Second] =
expTime * nExp.withUnit[Unitless]
}
}
Thanks turns out it works when doing imports as import coulomb._
This seems to be down to a compiler issue when using a kindProjector
flag
@cquiroz thanks for the pointer! I will try to keep that in mind
I did a first attempt trying to use coulomb in scala 3. I got quite a bit of progress on a relatively simple library that uses coulomb but I have some errors I can't solve, having tried several imports.
How could I get this work?
I'm importing
I have a few similar errors for division and multipaction. I guess I'm missing an algebra?
Any guidance would be appreciated