convert-units-0: Arithmetic and type checked conversions between units.
Copyright(c) Alice Rixte 2025
LicenseBSD 3
Maintaineralice.rixte@u-bordeaux.fr
Stabilityunstable
Portabilitynon-portable (GHC extensions)
Safe HaskellNone
LanguageHaskell2010

Data.Units.Base.Convert

Description

Conversion between units. Use from, to, or fromTo to convert between two units of the same dimension.

Implementing conversions for custom units

Depending on how the custom unit is converted to its standard unit, there are three ways to implement its conversion summarized in the following table and described with further details afterwards:

Which instances to declareNote
Conversion factor ConversionFactor and ConvertibleUnit using the default implementations for fromBaseUnit and toBaseUnit fromTo == fromTo'
Affine conversion ConversionFactor and ConvertibleUnit fromTo /= fromTo'
Non linear conversion ConvertibleUnit from', to' and fromTo' cannot be used

Multiplication by a conversion factor

For units that can be converted to and from their corresponding standard units by multiplication of a converion factor, you only need to declare an instance of ConversionFactor, like

instance Fractional a => ConversionFactor Hour a where
  factor = 3600

instance Fractional a => ConvertibleUnit Hour a
   -- uses default implementations for fromBaseUnit and toBaseUnit
>>> fromTo @Hour @Second 1
Second 3600.0
>>> fromTo' @Hour @Second 1
Second 3600.0

Affine conversion (with an offset)

Some units cannot be conversed by a simple multiplication. For instance, the conversion between Celsius degrees and Kelvin degrees involves addition x °C = x + 273.15 K.

However, when considered as differences of temperatures, Celsius degrees are converted to Kelvin degrees by a multiplication of 1.

This can be expressed by the following instances:

instance Num a => ConversionFactor Celsius a where
  factor = 1

instance Fractional a => ConvertibleUnit Celsius a where
  toBaseUnit (Celsius x) = Kelvin (x - 273.15)
  fromBaseUnit (Kelvin x) = Celsius (x + 273.15)
>>> fromTo @Celsius @Kelvin 0
Kelvin 273.15
>>> fromTo' @Celsius @Kelvin 0
Kelvin 0.0

Other conversions

Any other conversion can be implemented, like for instance logarithmic units. In this case, you should only give an instance for ConvertibleUnit, and no instance for ConversionFactor. See for instance linear picth Tet.

Synopsis

Documentation

type family DimEq (u :: Unit) (v :: Unit) where ... Source #

A constraint to test whether two units have

Equations

DimEq u v = DimEqStd u v (DimOf u) (DimOf v) 

Generic conversion between units

class (IsUnit u, IsUnit (BaseUnitOf u)) => ConvertibleUnit (u :: Unit) a where Source #

A unit whose quantities are convertible from that unit to its corresponding base unit.

Instances must satisfy the following law :

Minimal complete definition

Nothing

Methods

toBaseUnit :: u a -> BaseUnitOf u a Source #

Convert a quantity to its base unit.

>>> import Data.Units.NonStd.Time
>>> toBaseUnit @Hour 1
Second 3600.0
>>> toBaseUnit (Hour 1)
Second 3600.0
>>> toBaseUnit @(Kilo Meter ./. Hour) 36
quantity @(Meter .*. Second .^- 1) 10.0
>>> toBaseUnit (Celsius 0)
Kelvin 273.15

default toBaseUnit :: ConversionFactor u a => u a -> BaseUnitOf u a Source #

fromBaseUnit :: BaseUnitOf u a -> u a Source #

Convert a quantity from its base unit to another unit.

>>> fromBaseUnit @Hour 1800
Hour 0.5
>>> fromBaseUnit 1800 :: Hour Double
Hour 0.5
>>> fromBaseUnit @(Kilo Meter ./. Hour) 10
quantity @(Kilo Meter .*. Hour .^- 1) 36.0
>>> fromBaseUnit @Celsius 0
Celsius (-273.15)

default fromBaseUnit :: ConversionFactor u a => BaseUnitOf u a -> u a Source #

Instances

Instances details
Fractional a => ConvertibleUnit Lumen a Source # 
Instance details

Defined in Data.Units.AngleSI.Derived

Fractional a => ConvertibleUnit Lux a Source # 
Instance details

Defined in Data.Units.AngleSI.Derived

Fractional a => ConvertibleUnit Steradian a Source # 
Instance details

Defined in Data.Units.AngleSI.Derived

Floating a => ConvertibleUnit Degree a Source # 
Instance details

Defined in Data.Units.AngleSI.NonStd.Angle

Floating a => ConvertibleUnit Gradian a Source # 
Instance details

Defined in Data.Units.AngleSI.NonStd.Angle

Floating a => ConvertibleUnit Turn a Source # 
Instance details

Defined in Data.Units.AngleSI.NonStd.Angle

Fractional a => ConvertibleUnit Radian a Source # 
Instance details

Defined in Data.Units.AngleSI.System

Fractional a => ConvertibleUnit NoUnit a Source # 
Instance details

Defined in Data.Units.Base.Convert

Fractional a => ConvertibleUnit Fahrenheit a Source # 
Instance details

Defined in Data.Units.NonStd.Temperature

Fractional a => ConvertibleUnit Hour a Source # 
Instance details

Defined in Data.Units.NonStd.Time

Fractional a => ConvertibleUnit Minute a Source # 
Instance details

Defined in Data.Units.NonStd.Time

Fractional a => ConvertibleUnit Lumen a Source # 
Instance details

Defined in Data.Units.SI.Derived.Angle

Fractional a => ConvertibleUnit Lux a Source # 
Instance details

Defined in Data.Units.SI.Derived.Angle

Fractional a => ConvertibleUnit Radian a Source # 
Instance details

Defined in Data.Units.SI.Derived.Angle

Fractional a => ConvertibleUnit Steradian a Source # 
Instance details

Defined in Data.Units.SI.Derived.Angle

Fractional a => ConvertibleUnit Becquerel a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Celsius a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Coulomb a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Farad a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Gray a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Henry a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Hertz a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Joule a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Katal a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Newton a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Ohm a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Pascal a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Siemens a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Sievert a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Tesla a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Volt a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Watt a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Fractional a => ConvertibleUnit Weber a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Floating a => ConvertibleUnit Degree a Source # 
Instance details

Defined in Data.Units.SI.NonStd.Angle

Floating a => ConvertibleUnit Gradian a Source # 
Instance details

Defined in Data.Units.SI.NonStd.Angle

Floating a => ConvertibleUnit Turn a Source # 
Instance details

Defined in Data.Units.SI.NonStd.Angle

Fractional a => ConvertibleUnit Ampere a Source # 
Instance details

Defined in Data.Units.SI.System

Fractional a => ConvertibleUnit Candela a Source # 
Instance details

Defined in Data.Units.SI.System

Fractional a => ConvertibleUnit Gram a Source # 
Instance details

Defined in Data.Units.SI.System

Fractional a => ConvertibleUnit Kelvin a Source # 
Instance details

Defined in Data.Units.SI.System

Fractional a => ConvertibleUnit Meter a Source # 
Instance details

Defined in Data.Units.SI.System

Fractional a => ConvertibleUnit Mole a Source # 
Instance details

Defined in Data.Units.SI.System

Fractional a => ConvertibleUnit Second a Source # 
Instance details

Defined in Data.Units.SI.System

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Atto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Atto u a -> BaseUnitOf (Atto u) a Source #

fromBaseUnit :: BaseUnitOf (Atto u) a -> Atto u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Centi u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Deca u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Deca u a -> BaseUnitOf (Deca u) a Source #

fromBaseUnit :: BaseUnitOf (Deca u) a -> Deca u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Deci u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Deci u a -> BaseUnitOf (Deci u) a Source #

fromBaseUnit :: BaseUnitOf (Deci u) a -> Deci u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Exa u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Exa u a -> BaseUnitOf (Exa u) a Source #

fromBaseUnit :: BaseUnitOf (Exa u) a -> Exa u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Femto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Giga u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Giga u a -> BaseUnitOf (Giga u) a Source #

fromBaseUnit :: BaseUnitOf (Giga u) a -> Giga u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Hecto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Kilo u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Kilo u a -> BaseUnitOf (Kilo u) a Source #

fromBaseUnit :: BaseUnitOf (Kilo u) a -> Kilo u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Mega u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Mega u a -> BaseUnitOf (Mega u) a Source #

fromBaseUnit :: BaseUnitOf (Mega u) a -> Mega u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Micro u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Milli u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Nano u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Nano u a -> BaseUnitOf (Nano u) a Source #

fromBaseUnit :: BaseUnitOf (Nano u) a -> Nano u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Peta u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Peta u a -> BaseUnitOf (Peta u) a Source #

fromBaseUnit :: BaseUnitOf (Peta u) a -> Peta u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Pico u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Pico u a -> BaseUnitOf (Pico u) a Source #

fromBaseUnit :: BaseUnitOf (Pico u) a -> Pico u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Quecca u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Quecto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Ronna u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Ronto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Tera u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

toBaseUnit :: Tera u a -> BaseUnitOf (Tera u) a Source #

fromBaseUnit :: BaseUnitOf (Tera u) a -> Tera u a Source #

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Yocto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Yotta u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Zepto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(ConvertibleUnit u a, Fractional a) => ConvertibleUnit (Zetta u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

(PrefixFactor p a, ConvertibleUnit u a, BaseUnitOf (p u) ~ BaseUnitOf u) => ConvertibleUnit (MetaPrefix p u) a Source # 
Instance details

Defined in Data.Units.Base.Prefix

(Num a, ConversionFactor u a, ConversionFactor v a, IsUnit (BaseUnitOf (u .*. v))) => ConvertibleUnit (u .*. v) a Source # 
Instance details

Defined in Data.Units.Base.Convert

Methods

toBaseUnit :: (u .*. v) a -> BaseUnitOf (u .*. v) a Source #

fromBaseUnit :: BaseUnitOf (u .*. v) a -> (u .*. v) a Source #

(ConversionFactor u a, IsUnit (BaseUnitOf (u .^. n)), KnownInt n) => ConvertibleUnit (u .^. n) a Source # 
Instance details

Defined in Data.Units.Base.Convert

Methods

toBaseUnit :: (u .^. n) a -> BaseUnitOf (u .^. n) a Source #

fromBaseUnit :: BaseUnitOf (u .^. n) a -> (u .^. n) a Source #

(Floating a, KnownNat b, KnownInt offs) => ConvertibleUnit (Tet b offs) a Source # 
Instance details

Defined in Data.Units.NonStd.Frequency

Methods

toBaseUnit :: Tet b offs a -> BaseUnitOf (Tet b offs) a Source #

fromBaseUnit :: BaseUnitOf (Tet b offs) a -> Tet b offs a Source #

type FromTo (u :: Unit) (v :: Unit) a = (DimEq u v, ConvertibleUnit u a, ConvertibleUnit v a) Source #

A constraint that is satisfied when both units have the same dimension and are such that u can be converted to v.

fromTo :: FromTo u v a => u a -> v a Source #

Conversion between two quantities with the same dimension.

>>> fromTo @Celsius @Kelvin 0
Kelvin 273.15
>>> fromTo @(Milli Second) @Hour 1
Hour 2.7777777777777776e-7
>>> fromTo (Milli (Second 1)) :: Hour Double
Hour 2.7777777777777776e-7
>>> fromTo @Turn @Degree (1/4) -- angle conversion
Degree 90.0
>>> fromTo @(Kilo Meter ./. Hour) @(Milli Meter ./. Milli Second) 36
quantity @(Milli Meter .*. Milli Second .^- 1) 10.0

from :: FromTo u v a => u a -> v a Source #

A mere synonym of fromTo where it is more intuitive to use only one type application.

>>> from @Celsius 0 :: Kelvin Double
Kelvin 273.15

to :: forall v u a. FromTo u v a => u a -> v a Source #

Same as fromTo but the type applications are reversed

>>> to @Kelvin (Celsius 0)
Kelvin 273.15

($~) :: FromTo u v a => (v a -> b) -> u a -> b infixr 0 Source #

A convenient operator for converting a unit before feeding it to a function.

>>> import Linear
>>> rotation (Radian th) = V2 (V2 (cos th) (- sin th)) (V2 (sin th)  (cos th))
>>> rotation $~ Degree 90
V2 (V2 6.123031769111886e-17 (-1.0)) (V2 1.0 6.123031769111886e-17)

(~&) :: FromTo u v a => u a -> (v a -> b) -> b infixl 1 Source #

Same as ($~) but with arguments flipped.

Conversion using conversion factors

class (ConvertibleUnit u a, Fractional a) => ConversionFactor (u :: Unit) a where Source #

Unit that can be converted to their corresponding standard unit by multiplication with a conversion factor.

Instances must satisfy the following laws:

Methods

factor :: a Source #

Multiplying a quantity of type u a with factor will convert it to its corresponding base unit BaseUnitOf u a

>>> factor @Hour :: Double
3600.0
>>> factor @Celsius :: Double
1.0
>>> factor @(Kilo Meter ./. Hour) :: Double
0.2777777777777778

Instances

Instances details
Fractional a => ConversionFactor Lumen a Source # 
Instance details

Defined in Data.Units.AngleSI.Derived

Methods

factor :: a Source #

Fractional a => ConversionFactor Lux a Source # 
Instance details

Defined in Data.Units.AngleSI.Derived

Methods

factor :: a Source #

Fractional a => ConversionFactor Steradian a Source # 
Instance details

Defined in Data.Units.AngleSI.Derived

Methods

factor :: a Source #

Floating a => ConversionFactor Degree a Source # 
Instance details

Defined in Data.Units.AngleSI.NonStd.Angle

Methods

factor :: a Source #

Floating a => ConversionFactor Gradian a Source # 
Instance details

Defined in Data.Units.AngleSI.NonStd.Angle

Methods

factor :: a Source #

Floating a => ConversionFactor Turn a Source # 
Instance details

Defined in Data.Units.AngleSI.NonStd.Angle

Methods

factor :: a Source #

Fractional a => ConversionFactor Radian a Source # 
Instance details

Defined in Data.Units.AngleSI.System

Methods

factor :: a Source #

Fractional a => ConversionFactor NoUnit a Source # 
Instance details

Defined in Data.Units.Base.Convert

Methods

factor :: a Source #

Fractional a => ConversionFactor Fahrenheit a Source # 
Instance details

Defined in Data.Units.NonStd.Temperature

Methods

factor :: a Source #

Fractional a => ConversionFactor Hour a Source # 
Instance details

Defined in Data.Units.NonStd.Time

Methods

factor :: a Source #

Fractional a => ConversionFactor Minute a Source # 
Instance details

Defined in Data.Units.NonStd.Time

Methods

factor :: a Source #

Fractional a => ConversionFactor Lumen a Source # 
Instance details

Defined in Data.Units.SI.Derived.Angle

Methods

factor :: a Source #

Fractional a => ConversionFactor Lux a Source # 
Instance details

Defined in Data.Units.SI.Derived.Angle

Methods

factor :: a Source #

Fractional a => ConversionFactor Radian a Source # 
Instance details

Defined in Data.Units.SI.Derived.Angle

Methods

factor :: a Source #

Fractional a => ConversionFactor Steradian a Source # 
Instance details

Defined in Data.Units.SI.Derived.Angle

Methods

factor :: a Source #

Fractional a => ConversionFactor Becquerel a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Celsius a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Coulomb a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Farad a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Gray a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Henry a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Hertz a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Joule a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Katal a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Newton a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Ohm a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Pascal a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Siemens a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Sievert a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Tesla a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Volt a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Watt a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Fractional a => ConversionFactor Weber a Source # 
Instance details

Defined in Data.Units.SI.Derived.NonAngle

Methods

factor :: a Source #

Floating a => ConversionFactor Degree a Source # 
Instance details

Defined in Data.Units.SI.NonStd.Angle

Methods

factor :: a Source #

Floating a => ConversionFactor Gradian a Source # 
Instance details

Defined in Data.Units.SI.NonStd.Angle

Methods

factor :: a Source #

Floating a => ConversionFactor Turn a Source # 
Instance details

Defined in Data.Units.SI.NonStd.Angle

Methods

factor :: a Source #

Fractional a => ConversionFactor Ampere a Source # 
Instance details

Defined in Data.Units.SI.System

Methods

factor :: a Source #

Fractional a => ConversionFactor Candela a Source # 
Instance details

Defined in Data.Units.SI.System

Methods

factor :: a Source #

Fractional a => ConversionFactor Gram a Source # 
Instance details

Defined in Data.Units.SI.System

Methods

factor :: a Source #

Fractional a => ConversionFactor Kelvin a Source # 
Instance details

Defined in Data.Units.SI.System

Methods

factor :: a Source #

Fractional a => ConversionFactor Meter a Source # 
Instance details

Defined in Data.Units.SI.System

Methods

factor :: a Source #

Fractional a => ConversionFactor Mole a Source # 
Instance details

Defined in Data.Units.SI.System

Methods

factor :: a Source #

Fractional a => ConversionFactor Second a Source # 
Instance details

Defined in Data.Units.SI.System

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Atto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Centi u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Deca u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Deci u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Exa u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Femto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Giga u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Hecto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Kilo u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Mega u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Micro u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Milli u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Nano u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Peta u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Pico u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Quecca u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Quecto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Ronna u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Ronto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Tera u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Yocto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Yotta u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Zepto u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

ConversionFactor u a => ConversionFactor (Zetta u) a Source # 
Instance details

Defined in Data.Units.SI.Prefixes

Methods

factor :: a Source #

(PrefixFactor p a, ConversionFactor u a, BaseUnitOf (p u) ~ BaseUnitOf u) => ConversionFactor (MetaPrefix p u) a Source # 
Instance details

Defined in Data.Units.Base.Prefix

Methods

factor :: a Source #

(Num a, ConversionFactor u a, ConversionFactor v a, IsUnit (BaseUnitOf (u .*. v))) => ConversionFactor (u .*. v) a Source # 
Instance details

Defined in Data.Units.Base.Convert

Methods

factor :: a Source #

(ConversionFactor u a, IsUnit (BaseUnitOf (u .^. n)), KnownInt n) => ConversionFactor (u .^. n) a Source # 
Instance details

Defined in Data.Units.Base.Convert

Methods

factor :: a Source #

toBaseUnit' :: ConversionFactor u a => u a -> BaseUnitOf u a Source #

Convert a quantity to its corresponding base unit by multiplying it by factor.

>>> toBaseUnit' @Hour 1
Second 3600.0
>>> toBaseUnit' (Hour 1)
Second 3600.0
>>> toBaseUnit' @(Kilo Meter ./. Hour) 36
quantity @(Meter .*. Second .^- 1) 10.0
>>> toBaseUnit' (Celsius 0)
Kelvin 0.0

fromBaseUnit' :: ConversionFactor u a => BaseUnitOf u a -> u a Source #

Convert a standard quantity to a unit u by dividing it by by factor.

>>> fromBaseUnit' @Hour 1800
Hour 0.5
>>> fromBaseUnit' 1800 :: Hour Double
Hour 0.5
>>> fromBaseUnit' @(Kilo Meter ./. Hour) 10
quantity @(Kilo Meter .*. Hour .^- 1) 36.0
>>> fromBaseUnit' @Celsius 0
Celsius 0.0

type FromTo' (u :: Unit) (v :: Unit) a = (DimEq u v, ConversionFactor u a, ConversionFactor v a) Source #

A constraint that is satisfied when both units have the same dimension and are such that u can be converted to v by using a conversion factor.

fromTo' :: FromTo' u v a => u a -> v a Source #

Conversion, using conversion factors, between two quantities with the same dimension

>>> fromTo' @Celsius @Kelvin 0
Kelvin 0.0
>>> fromTo' @(Milli Second) @Hour 1
Hour 2.7777777777777776e-7
>>> fromTo' (Milli (Second 1)) :: Hour Double
Hour 2.7777777777777776e-7
>>> fromTo' @Turn @Degree (1/4) -- angle conversion
Degree 90.0
>>> fromTo' @(Kilo Meter ./. Hour) @(Milli Meter ./. Milli Second) 36
quantity @(Milli Meter .*. Milli Second .^- 1) 10.0

from' :: FromTo' u v a => u a -> v a Source #

A mere synonym of fromTo' where it is more intuitive to use only one type application.

>>> from' @Celsius 0 :: Kelvin Double
Kelvin 0.0

to' :: forall v u a. FromTo' u v a => u a -> v a Source #

Same as fromTo' but the type applications are reversed

>>> to' @Kelvin (Celsius 0)
Kelvin 0.0