All Downloads are FREE. Search and download functionalities are using the official Maven repository.
Please wait. This can take some minutes ...
Many resources are needed to download a project. Please understand that we have to compensate our server costs. Thank you in advance.
Project price only 1 $
You can buy this project and download/modify it how often you want.
axle.quanta.Temperature.scala Maven / Gradle / Ivy
package axle.quanta
import cats.kernel.Eq
import spire.algebra.Field
import spire.algebra.CModule
import axle.algebra.Bijection
import axle.algebra.DirectedGraph
import axle.algebra.Transform
import axle.algebra.Scale
case class Temperature() extends Quantum {
def wikipediaUrl: String = "http://en.wikipedia.org/wiki/Temperature"
}
trait TemperatureUnits extends QuantumUnits[Temperature] {
lazy val kelvin = unit("kelvin", "K")
lazy val celsius = unit("celsius", "C")
lazy val fahrenheit = unit("fahrenheit", "f")
def units: List[UnitOfMeasurement[Temperature]] =
List(kelvin, celsius, fahrenheit)
}
trait TemperatureConverter[N] extends UnitConverter[Temperature, N] with TemperatureUnits {
def defaultUnit = celsius
}
object Temperature {
import spire.math._
def converterGraphK2[N: ConvertableTo: Eq, DG[_, _]](
implicit
module: CModule[N, Rational], field: Field[N],
evDG: DirectedGraph[DG[UnitOfMeasurement[Temperature], N => N], UnitOfMeasurement[Temperature], N => N]) =
converterGraph[N, DG[UnitOfMeasurement[Temperature], N => N]]
def converterGraph[N: ConvertableTo: Eq, DG](
implicit
module: CModule[N, Rational], field: Field[N],
evDG: DirectedGraph[DG, UnitOfMeasurement[Temperature], N => N]) =
new UnitConverterGraph[Temperature, N, DG] with TemperatureConverter[N] {
def links: Seq[(UnitOfMeasurement[Temperature], UnitOfMeasurement[Temperature], Bijection[N, N])] =
List[(UnitOfMeasurement[Temperature], UnitOfMeasurement[Temperature], Bijection[N, N])](
(celsius, kelvin, Transform[N](ConvertableTo[N].fromDouble(-273.15))(field.additive)),
(celsius, fahrenheit, Transform[N](ConvertableTo[N].fromInt(-32))(field.additive).bidirectionallyAndThen(Scale[N](Rational(5, 9)))))
}
}