units-defs-2.2: Data/Dimensions/SI.hs
{-# LANGUAGE TypeOperators, TemplateHaskell #-}
-----------------------------------------------------------------------------
-- |
-- Module : Data.Dimensions.SI
-- Copyright : (C) 2013 Richard Eisenberg
-- License : BSD-style (see LICENSE)
-- Maintainer : Richard Eisenberg (rae@cs.brynmawr.edu)
-- Stability : experimental
-- Portability : non-portable
--
-- This module defines SI dimensions. The names of SI dimensions conform to
-- <http://www.bipm.org/utils/common/documents/jcgm/JCGM_200_2012.pdf>.
-----------------------------------------------------------------------------
module Data.Dimensions.SI where
import Data.Metrology.Poly
import Data.Metrology.TH
declareDimension "Length"
declareDimension "Mass"
declareDimension "Time"
declareDimension "Current"
declareDimension "Temperature"
declareDimension "AmountOfSubstance"
declareDimension "LuminousIntensity"
-- | A plane angle is dimensionless; alternatively, it has dimension
-- length/length. It would be wrong to divide 2 meters by 1
-- meter and conclude that the quantity is 2 radians or degrees. To make
-- plane angle safe to use, we define it as a fundamental dimension.
declareDimension "PlaneAngle"
-- | As we did for plane angle, we must make solid angle a fundamental
-- dimension to avoid programming mistakes.
--
-- A solid angle is a measure of the amount of the field of view from some
-- particular point that a given object covers.
declareDimension "SolidAngle"
type Area = Length :^ Two
type Volume = Length :^ Three
type Velocity = Length :/ Time
type Acceleration = Velocity :/ Time
type Wavenumber = Length :^ MOne
type Density = Mass :/ Volume
type SurfaceDensity = Mass :/ Area
type SpecificVolume = Volume :/ Mass
type CurrentDensity = Current :/ Area
type MagneticStrength = Current :/ Length
type Concentration = AmountOfSubstance :/ Volume
type Luminance = LuminousIntensity :/ Area
type Frequency = Time :^ MOne
type Force = Mass :* Acceleration
type Pressure = Force :/ Area
type Energy = Force :* Length
type Power = Energy :/ Time
type Charge = Current :* Time
type ElectricPotential = Power :/ Current
type Capacitance = Charge :/ ElectricPotential
type Resistance = ElectricPotential :/ Current
type Conductance = Current :/ ElectricPotential
type MagneticFlux = ElectricPotential :* Time
type MagneticFluxDensity = MagneticFlux :/ Area
type Inductance = MagneticFlux :/ Current
type LuminousFlux = LuminousIntensity
type Illuminance = LuminousIntensity :/ Area
type Kerma = Area :/ (Time :^ Two)
type CatalyticActivity = AmountOfSubstance :/ Time
type Momentum = Mass :* Velocity
type AngularVelocity = PlaneAngle :/ Time