Copyright | Copyright (C) 2006-2018 Bjorn Buckwalter |
---|---|

License | BSD3 |

Maintainer | bjorn@buckwalter.se |

Stability | Stable |

Portability | GHC only |

Safe Haskell | None |

Language | Haskell2010 |

# Summary

This module defines the SI prefixes, the SI base units and the SI derived units. It also defines the units outside of the SI that are accepted for use with the SI. Any chapters, sections or tables referenced are from [1] unless otherwise specified.

# References

## Synopsis

- metre :: Num a => Unit Metric DLength a
- meter :: Num a => Unit Metric DLength a
- gram :: Fractional a => Unit Metric DMass a
- second :: Num a => Unit Metric DTime a
- ampere :: Num a => Unit Metric DElectricCurrent a
- kelvin :: Num a => Unit Metric DThermodynamicTemperature a
- mole :: Num a => Unit Metric DAmountOfSubstance a
- candela :: Num a => Unit Metric DLuminousIntensity a
- radian :: Num a => Unit Metric DPlaneAngle a
- steradian :: Num a => Unit Metric DSolidAngle a
- hertz :: Num a => Unit Metric DFrequency a
- newton :: Num a => Unit Metric DForce a
- pascal :: Num a => Unit Metric DPressure a
- joule :: Num a => Unit Metric DEnergy a
- watt :: Num a => Unit Metric DPower a
- coulomb :: Num a => Unit Metric DElectricCharge a
- volt :: Num a => Unit Metric DElectricPotential a
- farad :: Num a => Unit Metric DCapacitance a
- ohm :: Num a => Unit Metric DElectricResistance a
- siemens :: Num a => Unit Metric DElectricConductance a
- weber :: Num a => Unit Metric DMagneticFlux a
- tesla :: Num a => Unit Metric DMagneticFluxDensity a
- henry :: Num a => Unit Metric DInductance a
- lumen :: Num a => Unit Metric DLuminousFlux a
- lux :: Num a => Unit Metric DIlluminance a
- degreeCelsius :: Num a => Unit Metric DCelsiusTemperature a
- fromDegreeCelsiusAbsolute :: Floating a => a -> ThermodynamicTemperature a
- toDegreeCelsiusAbsolute :: Floating a => ThermodynamicTemperature a -> a
- becquerel :: Num a => Unit Metric DActivity a
- gray :: Num a => Unit Metric DAbsorbedDose a
- sievert :: Num a => Unit Metric DDoseEquivalent a
- katal :: Num a => Unit Metric DCatalyticActivity a
- minute :: Num a => Unit NonMetric DTime a
- hour :: Num a => Unit NonMetric DTime a
- day :: Num a => Unit NonMetric DTime a
- hectare :: Fractional a => Unit NonMetric DArea a
- litre :: Fractional a => Unit Metric DVolume a
- liter :: Fractional a => Unit Metric DVolume a
- tonne :: Num a => Unit Metric DMass a
- metricTon :: Num a => Unit Metric DMass a
- degree :: Floating a => Unit NonMetric DPlaneAngle a
- arcminute :: Floating a => Unit NonMetric DPlaneAngle a
- arcsecond :: Floating a => Unit NonMetric DPlaneAngle a
- degreeOfArc :: Floating a => Unit NonMetric DPlaneAngle a
- minuteOfArc :: Floating a => Unit NonMetric DPlaneAngle a
- secondOfArc :: Floating a => Unit NonMetric DPlaneAngle a
- astronomicalUnit :: Num a => Unit NonMetric DLength a
- deka :: Num a => Unit Metric d a -> Unit NonMetric d a
- deca :: Num a => Unit Metric d a -> Unit NonMetric d a
- hecto :: Num a => Unit Metric d a -> Unit NonMetric d a
- kilo :: Num a => Unit Metric d a -> Unit NonMetric d a
- mega :: Num a => Unit Metric d a -> Unit NonMetric d a
- giga :: Num a => Unit Metric d a -> Unit NonMetric d a
- tera :: Num a => Unit Metric d a -> Unit NonMetric d a
- peta :: Num a => Unit Metric d a -> Unit NonMetric d a
- exa :: Num a => Unit Metric d a -> Unit NonMetric d a
- zetta :: Num a => Unit Metric d a -> Unit NonMetric d a
- yotta :: Num a => Unit Metric d a -> Unit NonMetric d a
- deci :: Fractional a => Unit Metric d a -> Unit NonMetric d a
- centi :: Fractional a => Unit Metric d a -> Unit NonMetric d a
- milli :: Fractional a => Unit Metric d a -> Unit NonMetric d a
- micro :: Fractional a => Unit Metric d a -> Unit NonMetric d a
- nano :: Fractional a => Unit Metric d a -> Unit NonMetric d a
- pico :: Fractional a => Unit Metric d a -> Unit NonMetric d a
- femto :: Fractional a => Unit Metric d a -> Unit NonMetric d a
- atto :: Fractional a => Unit Metric d a -> Unit NonMetric d a
- zepto :: Fractional a => Unit Metric d a -> Unit NonMetric d a
- yocto :: Fractional a => Unit Metric d a -> Unit NonMetric d a
- data Prefix
- applyPrefix :: Fractional a => Prefix -> Unit Metric d a -> Unit NonMetric d a
- siPrefixes :: [Prefix]

# SI Base Units

These are the base units from section 4.1. To avoid a myriad of one-letter functions that would doubtlessly cause clashes and frustration in users' code we spell out all unit names in full, as we did for prefixes. We also elect to spell the unit names in singular form, as allowed by section 9.7 "Other spelling conventions".

We define the SI base units in the order of table 1.

# SI Derived Units

From Table 3, SI derived units with special names and symbols, including the radian and steradian.

## Celsius Temperature

A problematic area is units which increase proportionally to the base SI units but cross zero at a different point. An example would be degrees Celsius (see section 4.2.1.1). The author feels that it is appropriate to define a unit for use with relative quantities (taking only into account the proportionality) and complement the unit with functions for converting absolute values.

The function `fromDegreeCelsiusAbsolute`

should be used in lieu of
"*~ degreeCelsius" when working with absolute temperatures. Similarily,
`toDegreeCelsiusAbsolute`

should be used in lieu of "/~ degreeCelsius"
when working with absolute temperatures.

degreeCelsius :: Num a => Unit Metric DCelsiusTemperature a Source #

fromDegreeCelsiusAbsolute :: Floating a => a -> ThermodynamicTemperature a Source #

toDegreeCelsiusAbsolute :: Floating a => ThermodynamicTemperature a -> a Source #

## Units Admitted for Reasons of Safeguarding Human Health

The last units from Table 3 are SI derived units with special names and symbols admitted for reasons of safeguarding human health.

# Units Accepted for Use with the SI

There are several units that are not strictly part of the SI but are either permanently or temporarily accepted for use with the SI. We define the permanently accepted ones in this module.

From Table 6, Units accepted for use with the SI.

We start with time which we grant exclusive rights to `minute`

and
`second`

.

## Units of Plane Angle

Since `minute`

and `second`

are already in use for time we use
`arcminute`

and `arcsecond`

[2] for plane angle instead.

Alternate (longer) forms of the above. In particular `degreeOfArc`

can be used if there is a percieved need to disambiguate from e.g.
temperature.

degreeOfArc :: Floating a => Unit NonMetric DPlaneAngle a Source #

minuteOfArc :: Floating a => Unit NonMetric DPlaneAngle a Source #

secondOfArc :: Floating a => Unit NonMetric DPlaneAngle a Source #

## Units Formerly Defined By Experiment

We decline to provide here those units - listed in Table 7 - which, while accepted for use with the SI, have values which are determined experimentally. For versioning purposes, those units can be found in Numeric.Units.Dimensional.NonSI.

However, in 2012 the IAU redefined the astronomical unit as a conventional unit of length directly tied to the meter, with a length of exactly 149 597 870 700 m and the official abbreviation of au [3]. We therefore include it here.

# SI Prefixes

Prefixes are used to form decimal multiples and submultiples of SI
Units as described in section 4.4. We will define the SI prefixes
in terms of the `prefix`

function which applies a scale factor to a
unit.

By defining SI prefixes as functions applied to a `Unit`

we satisfy
section 6.2.6 "Unacceptability of stand-alone prefixes".

We define all SI prefixes from Table 5. Multiples first.

Then the submultiples.

We supply an explicit representation of an SI prefix, along with a function to apply one and a list of all prefixes defined by the SI.

## Instances

Eq Prefix Source # | |

Data Prefix Source # | |

Defined in Numeric.Units.Dimensional.UnitNames.Internal gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Prefix -> c Prefix # gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Prefix # toConstr :: Prefix -> Constr # dataTypeOf :: Prefix -> DataType # dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Prefix) # dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Prefix) # gmapT :: (forall b. Data b => b -> b) -> Prefix -> Prefix # gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Prefix -> r # gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Prefix -> r # gmapQ :: (forall d. Data d => d -> u) -> Prefix -> [u] # gmapQi :: Int -> (forall d. Data d => d -> u) -> Prefix -> u # gmapM :: Monad m => (forall d. Data d => d -> m d) -> Prefix -> m Prefix # gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Prefix -> m Prefix # gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Prefix -> m Prefix # | |

Ord Prefix Source # | |

Defined in Numeric.Units.Dimensional.UnitNames.Internal | |

Generic Prefix Source # | |

NFData Prefix Source # | |

Defined in Numeric.Units.Dimensional.UnitNames.Internal | |

HasInterchangeName Prefix Source # | |

Defined in Numeric.Units.Dimensional.UnitNames.Internal | |

type Rep Prefix Source # | |

Defined in Numeric.Units.Dimensional.UnitNames.Internal type Rep Prefix = D1 (MetaData "Prefix" "Numeric.Units.Dimensional.UnitNames.Internal" "dimensional-1.3-7Gh1mp5ZBGaGfkDr7lUYf2" False) (C1 (MetaCons "Prefix" PrefixI True) (S1 (MetaSel (Just "prefixName") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 PrefixName) :*: S1 (MetaSel (Just "scaleFactor") NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 Rational))) |

applyPrefix :: Fractional a => Prefix -> Unit Metric d a -> Unit NonMetric d a Source #

siPrefixes :: [Prefix] Source #

A list of all `Prefix`

es defined by the SI.