-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Statically checked physical dimensions. -- -- Dimensional is a library providing data types for performing -- arithmetic with physical quantities and units. Information about the -- physical dimensions of the quantities and units is embedded in their -- types and the validity of operations is verified by the type checker -- at compile time. The boxing and unboxing of numerical values as -- quantities is done by multiplication and division with units. The -- library is designed to, as far as is practical, enforce/encourage best -- practices of unit usage. Requires GHC 6.6.1 or later. @package dimensional @version 0.7.3 -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.NumType class (NumTypeI n) => NumType n class (PosTypeI n) => PosType n class (NegTypeI n) => NegType n class (NonZeroI n) => NonZero n class (NumTypeI a, NumTypeI b) => Succ a b | a -> b, b -> a class (NumTypeI a, NumTypeI b) => Negate a b | a -> b, b -> a class (Add a b c, Sub c b a) => Sum a b c | a b -> c, a c -> b, b c -> a class (NumTypeI a, NonZeroI b, NumTypeI c) => Div a b c | a b -> c, c b -> a class (NumTypeI a, NumTypeI b, NumTypeI c) => Mul a b c | a b -> c toNum :: (NumTypeI n, Num a) => n -> a incr :: (Succ a b) => a -> b decr :: (Succ a b) => b -> a negate :: (Negate a b) => a -> b (+) :: (Sum a b c) => a -> b -> c (-) :: (Sum a b c) => c -> b -> a (*) :: (Mul a b c) => a -> b -> c (/) :: (Div a b c) => a -> b -> c data Zero data Pos n data Neg n type Pos1 = Pos Zero type Pos2 = Pos Pos1 type Pos3 = Pos Pos2 type Pos4 = Pos Pos3 type Pos5 = Pos Pos4 type Neg1 = Neg Zero type Neg2 = Neg Neg1 type Neg3 = Neg Neg2 type Neg4 = Neg Neg3 type Neg5 = Neg Neg4 zero :: Zero pos1 :: Pos1 pos2 :: Pos2 pos3 :: Pos3 pos4 :: Pos4 pos5 :: Pos5 neg1 :: Neg1 neg2 :: Neg2 neg3 :: Neg3 neg4 :: Neg4 neg5 :: Neg5 instance (NegTypeI n, Div c (Neg n) a) => Mul a (Neg n) c instance (PosTypeI p, Div c (Pos p) a) => Mul a (Pos p) c instance (NumTypeI n) => Mul n Zero Zero instance (NegTypeI n, Negate n p', Div (Pos p') (Pos p) (Pos p''), Negate (Pos p'') (Neg n'')) => Div (Neg n) (Pos p) (Neg n'') instance (NegTypeI n, Negate n p', Div (Pos p) (Pos p') (Pos p''), Negate (Pos p'') (Neg n'')) => Div (Pos p) (Neg n) (Neg n'') instance (NegTypeI n, NegTypeI n', Negate n p, Negate n' p', Div (Pos p) (Pos p') (Pos p'')) => Div (Neg n) (Neg n') (Pos p'') instance (Sum n' (Pos n'') (Pos n), Div n'' (Pos n') n''', PosTypeI n''') => Div (Pos n) (Pos n') (Pos n''') instance (NonZeroI n) => Div Zero n Zero instance (Add a b c, Sub c b a) => Sum a b c instance (Succ a a', NegTypeI b, Sub a' b c) => Sub a (Neg b) c instance (Succ a' a, PosTypeI b, Sub a' b c) => Sub a (Pos b) c instance (NumType a) => Sub a Zero a instance (NegTypeI a, Succ c b, Add a c d) => Add (Neg a) b d instance (PosTypeI a, Succ b c, Add a c d) => Add (Pos a) b d instance (NumTypeI a) => Add Zero a a instance (NegTypeI a) => Succ (Neg (Neg a)) (Neg a) instance Succ (Neg Zero) Zero instance (PosTypeI a) => Succ (Pos a) (Pos (Pos a)) instance Succ Zero (Pos Zero) instance (NegTypeI a, PosTypeI b, Negate a b) => Negate (Neg a) (Pos b) instance (PosTypeI a, NegTypeI b, Negate a b) => Negate (Pos a) (Neg b) instance Negate Zero Zero instance (NegTypeI n) => Show (Neg n) instance (PosTypeI n) => Show (Pos n) instance Show Zero instance (NegTypeI n) => NonZeroI (Neg n) instance (NegTypeI n) => NegTypeI (Neg n) instance (NegTypeI n) => NumTypeI (Neg n) instance (PosTypeI n) => NonZeroI (Pos n) instance (PosTypeI n) => PosTypeI (Pos n) instance (PosTypeI n) => NumTypeI (Pos n) instance NegTypeI Zero instance PosTypeI Zero instance NumTypeI Zero instance (NonZeroI n) => NonZero n instance (NegTypeI n) => NegType n instance (PosTypeI n) => PosType n instance (NumTypeI n) => NumType n -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional newtype Dimensional v d a Dimensional :: a -> Dimensional v d a data DUnit data DQuantity type Unit = Dimensional DUnit type Quantity = Dimensional DQuantity (*~) :: (Num a) => a -> Unit d a -> Quantity d a (/~) :: (Fractional a) => Quantity d a -> Unit d a -> a data Dim l m t i th n j type DOne = Dim Zero Zero Zero Zero Zero Zero Zero type DLength = Dim Pos1 Zero Zero Zero Zero Zero Zero type DMass = Dim Zero Pos1 Zero Zero Zero Zero Zero type DTime = Dim Zero Zero Pos1 Zero Zero Zero Zero type DElectricCurrent = Dim Zero Zero Zero Pos1 Zero Zero Zero type DThermodynamicTemperature = Dim Zero Zero Zero Zero Pos1 Zero Zero type DAmountOfSubstance = Dim Zero Zero Zero Zero Zero Pos1 Zero type DLuminousIntensity = Dim Zero Zero Zero Zero Zero Zero Pos1 type Dimensionless = Quantity DOne type Length = Quantity DLength type Mass = Quantity DMass type Time = Quantity DTime type ElectricCurrent = Quantity DElectricCurrent type ThermodynamicTemperature = Quantity DThermodynamicTemperature type AmountOfSubstance = Quantity DAmountOfSubstance type LuminousIntensity = Quantity DLuminousIntensity class Mul d d' d'' | d d' -> d'' class Div d d' d'' | d d' -> d'' class (NumType x) => Pow d x d' | d x -> d' class (NonZero x) => Root d x d' | d x -> d' (*) :: (Num a, Mul d d' d'') => Dimensional v d a -> Dimensional v d' a -> Dimensional v d'' a (/) :: (Fractional a, Div d d' d'') => Dimensional v d a -> Dimensional v d' a -> Dimensional v d'' a (^) :: (Fractional a, Pow d n d') => Dimensional v d a -> n -> Dimensional v d' a (^+) :: (Num a, PosType n, Pow d n d') => Dimensional v d a -> n -> Dimensional v d' a negate :: (Num a) => Quantity d a -> Quantity d a (+) :: (Num a) => Quantity d a -> Quantity d a -> Quantity d a (-) :: (Num a) => Quantity d a -> Quantity d a -> Quantity d a abs :: (Num a) => Quantity d a -> Quantity d a nroot :: (Floating a, Root d n d') => n -> Dimensional v d a -> Dimensional v d' a sqrt :: (Floating a, Root d Pos2 d') => Dimensional v d a -> Dimensional v d' a cbrt :: (Floating a, Root d Pos3 d') => Dimensional v d a -> Dimensional v d' a (^/) :: (Floating a, Root d n d') => Dimensional v d a -> n -> Dimensional v d' a (*~~) :: (Num a) => [a] -> Unit d a -> [Quantity d a] (/~~) :: (Fractional a) => [Quantity d a] -> Unit d a -> [a] sum :: (Num a) => [Quantity d a] -> Quantity d a dimensionlessLength :: (Num a) => [Dimensional v d a] -> Dimensionless a log :: (Floating a) => Dimensionless a -> Dimensionless a sin :: (Floating a) => Dimensionless a -> Dimensionless a cos :: (Floating a) => Dimensionless a -> Dimensionless a tan :: (Floating a) => Dimensionless a -> Dimensionless a asin :: (Floating a) => Dimensionless a -> Dimensionless a acos :: (Floating a) => Dimensionless a -> Dimensionless a atan :: (Floating a) => Dimensionless a -> Dimensionless a sinh :: (Floating a) => Dimensionless a -> Dimensionless a cosh :: (Floating a) => Dimensionless a -> Dimensionless a tanh :: (Floating a) => Dimensionless a -> Dimensionless a asinh :: (Floating a) => Dimensionless a -> Dimensionless a acosh :: (Floating a) => Dimensionless a -> Dimensionless a atanh :: (Floating a) => Dimensionless a -> Dimensionless a exp :: (Floating a) => Dimensionless a -> Dimensionless a (**) :: (Floating a) => Dimensionless a -> Dimensionless a -> Dimensionless a atan2 :: (RealFloat a) => Quantity d a -> Quantity d a -> Dimensionless a one :: (Num a) => Unit DOne a _1 :: (Num a) => Dimensionless a _2 :: (Num a) => Dimensionless a _3 :: (Num a) => Dimensionless a _4 :: (Num a) => Dimensionless a _0 :: (Num a) => Dimensionless a pi :: (Floating a) => Dimensionless a dimUnit :: (NumType n) => String -> n -> Maybe String prefix :: (Num a) => a -> Unit d a -> Unit d a instance (Eq a) => Eq (Dimensional v d a) instance (Ord a) => Ord (Dimensional v d a) instance (NumType l, NumType m, NumType t, NumType i, NumType th, NumType n, NumType j) => Show (Dim l m t i th n j) instance (Show d, Show a) => Show (Quantity d a) instance Functor Dimensionless instance (Div l x l', Div m x m', Div t x t', Div i x i', Div th x th', Div n x n', Div j x j') => Root (Dim l m t i th n j) x (Dim l' m' t' i' th' n' j') instance (Mul l x l', Mul m x m', Mul t x t', Mul i x i', Mul th x th', Mul n x n', Mul j x j') => Pow (Dim l m t i th n j) x (Dim l' m' t' i' th' n' j') instance (Sum l l' l'', Sum m m' m'', Sum t t' t'', Sum i i' i'', Sum th th' th'', Sum n n' n'', Sum j j' j'') => Div (Dim l'' m'' t'' i'' th'' n'' j'') (Dim l' m' t' i' th' n' j') (Dim l m t i th n j) instance (Sum l l' l'', Sum m m' m'', Sum t t' t'', Sum i i' i'', Sum th th' th'', Sum n n' n'', Sum j j' j'') => Mul (Dim l m t i th n j) (Dim l' m' t' i' th' n' j') (Dim l'' m'' t'' i'' th'' n'' j'') -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional.Quantities type DArea = Dim Pos2 Zero Zero Zero Zero Zero Zero type Area = Quantity DArea type DVolume = Dim Pos3 Zero Zero Zero Zero Zero Zero type Volume = Quantity DVolume type DVelocity = Dim Pos1 Zero Neg1 Zero Zero Zero Zero type Velocity = Quantity DVelocity type DAcceleration = Dim Pos1 Zero Neg2 Zero Zero Zero Zero type Acceleration = Quantity DAcceleration type DWaveNumber = Dim Neg1 Zero Zero Zero Zero Zero Zero type WaveNumber = Quantity DWaveNumber type DMassDensity = Dim Neg3 Pos1 Zero Zero Zero Zero Zero type MassDensity = Quantity DMassDensity type Density = MassDensity type DSpecificVolume = Dim Pos3 Neg1 Zero Zero Zero Zero Zero type SpecificVolume = Quantity DSpecificVolume type DCurrentDensity = Dim Neg2 Zero Zero Pos1 Zero Zero Zero type CurrentDensity = Quantity DCurrentDensity type DMagneticFieldStrength = Dim Neg1 Zero Zero Pos1 Zero Zero Zero type MagneticFieldStrength = Quantity DMagneticFieldStrength type DAmountOfSubstanceConcentration = Dim Neg3 Zero Zero Zero Zero Pos1 Zero type AmountOfSubstanceConcentration = Quantity DAmountOfSubstanceConcentration type Concentration = AmountOfSubstanceConcentration type DLuminance = Dim Neg2 Zero Zero Zero Zero Zero Pos1 type Luminance = Quantity DLuminance square :: (Num a) => Unit DLength a -> Unit DArea a cubic :: (Num a) => Unit DLength a -> Unit DVolume a type DPlaneAngle = DOne type PlaneAngle = Dimensionless type DSolidAngle = DOne type SolidAngle = Dimensionless type DFrequency = Dim Zero Zero Neg1 Zero Zero Zero Zero type Frequency = Quantity DFrequency type DForce = Dim Pos1 Pos1 Neg2 Zero Zero Zero Zero type Force = Quantity DForce type DPressure = Dim Neg1 Pos1 Neg2 Zero Zero Zero Zero type DStress = DPressure type Pressure = Quantity DPressure type Stress = Quantity DStress type DEnergy = Dim Pos2 Pos1 Neg2 Zero Zero Zero Zero type DWork = DEnergy type DQuantityOfHeat = DEnergy type Energy = Quantity DEnergy type Work = Quantity DWork type QuantityOfHeat = Quantity DQuantityOfHeat type DPower = Dim Pos2 Pos1 Neg3 Zero Zero Zero Zero type DRadiantFlux = DPower type Power = Quantity DPower type RadiantFlux = Quantity DRadiantFlux type DElectricCharge = Dim Zero Zero Pos1 Pos1 Zero Zero Zero type DQuantityOfElectricity = DElectricCharge type ElectricCharge = Quantity DElectricCharge type QuantityOfElectricity = Quantity DQuantityOfElectricity type DElectricPotential = Dim Pos2 Pos1 Neg3 Neg1 Zero Zero Zero type DPotentialDifference = DElectricPotential type DElectromotiveForce = DElectricPotential type ElectricPotential = Quantity DElectricPotential type PotentialDifference = Quantity DPotentialDifference type ElectromotiveForce = Quantity DElectromotiveForce type DCapacitance = Dim Neg2 Neg1 Pos4 Pos2 Zero Zero Zero type Capacitance = Quantity DCapacitance type DElectricResistance = Dim Pos2 Pos1 Neg3 Neg2 Zero Zero Zero type ElectricResistance = Quantity DElectricResistance type DElectricConductance = Dim Neg2 Neg1 Pos3 Pos2 Zero Zero Zero type ElectricConductance = Quantity DElectricConductance type DMagneticFlux = Dim Pos2 Pos1 Neg2 Neg1 Zero Zero Zero type MagneticFlux = Quantity DMagneticFlux type DMagneticFluxDensity = Dim Zero Pos1 Neg2 Neg1 Zero Zero Zero type MagneticFluxDensity = Quantity DMagneticFluxDensity type DInductance = Dim Pos2 Pos1 Neg2 Neg2 Zero Zero Zero type Inductance = Quantity DInductance type DLuminousFlux = DLuminousIntensity type LuminousFlux = Quantity DLuminousFlux type DIlluminance = Dim Neg2 Zero Zero Zero Zero Zero Pos1 type Illuminance = Quantity DIlluminance type DCelsiusTemperature = DThermodynamicTemperature type CelsiusTemperature = Quantity DCelsiusTemperature type DActivity = DFrequency type Activity = Quantity DActivity type DAbsorbedDose = Dim Pos2 Zero Neg2 Zero Zero Zero Zero type DSpecificEnergy = DAbsorbedDose type DKerma = DAbsorbedDose type AbsorbedDose = Quantity DAbsorbedDose type SpecificEnergy = Quantity DSpecificEnergy type Kerma = Quantity DKerma type DDoseEquivalent = DAbsorbedDose type DAmbientDoseEquivalent = DDoseEquivalent type DDirectionalDoseEquivalent = DDoseEquivalent type DPersonalDoseEquivalent = DDoseEquivalent type DEquivalentDose = DDoseEquivalent type DoseEquivalent = Quantity DDoseEquivalent type AmbientDoseEquivalent = DoseEquivalent type DirectionalDoseEquivalent = DoseEquivalent type PersonalDoseEquivalent = DoseEquivalent type EquivalentDose = DoseEquivalent type DAngularVelocity = DFrequency type AngularVelocity = Quantity DAngularVelocity type DAngularAcceleration = Dim Zero Zero Neg2 Zero Zero Zero Zero type AngularAcceleration = Quantity DAngularAcceleration type DDynamicViscosity = Dim Neg1 Pos1 Neg1 Zero Zero Zero Zero type DynamicViscosity = Quantity DDynamicViscosity type DMomentOfForce = DEnergy type MomentOfForce = Quantity DMomentOfForce type DSurfaceTension = Dim Zero Pos1 Neg2 Zero Zero Zero Zero type SurfaceTension = Quantity DSurfaceTension type DHeatFluxDensity = Dim Zero Pos1 Neg3 Zero Zero Zero Zero type DIrradiance = DHeatFluxDensity type HeatFluxDensity = Quantity DHeatFluxDensity type Irradiance = Quantity DIrradiance type DRadiantIntensity = DPower type RadiantIntensity = Quantity DRadiantIntensity type DRadiance = DIrradiance type Radiance = Quantity DRadiance type DHeatCapacity = Dim Pos2 Pos1 Neg2 Zero Neg1 Zero Zero type DEntropy = DHeatCapacity type HeatCapacity = Quantity DHeatCapacity type Entropy = Quantity DEntropy type DSpecificHeatCapacity = Dim Pos2 Zero Neg2 Zero Neg1 Zero Zero type DSpecificEntropy = DSpecificHeatCapacity type SpecificHeatCapacity = Quantity DSpecificHeatCapacity type SpecificEntropy = Quantity DSpecificEntropy type DThermalConductivity = Dim Pos1 Pos1 Neg3 Zero Neg1 Zero Zero type ThermalConductivity = Quantity DThermalConductivity type DEnergyDensity = DPressure type EnergyDensity = Quantity DEnergyDensity type DElectricFieldStrength = Dim Pos1 Pos1 Neg3 Neg1 Zero Zero Zero type ElectricFieldStrength = Quantity DElectricFieldStrength type DElectricChargeDensity = Dim Neg3 Zero Pos1 Pos1 Zero Zero Zero type ElectricChargeDensity = Quantity DElectricChargeDensity type DElectricFluxDensity = Dim Neg2 Zero Pos1 Pos1 Zero Zero Zero type ElectricFluxDensity = Quantity DElectricFluxDensity type DPermittivity = Dim Neg3 Neg1 Pos4 Pos2 Zero Zero Zero type Permittivity = Quantity DPermittivity type DPermeability = Dim Pos1 Pos1 Neg2 Neg2 Zero Zero Zero type Permeability = Quantity DPermeability type DMolarEnergy = Dim Pos2 Pos1 Neg2 Zero Zero Neg1 Zero type MolarEnergy = Quantity DMolarEnergy type DMolarEntropy = Dim Pos2 Pos1 Neg2 Zero Neg1 Neg1 Zero type DMolarHeatCapacity = DMolarEntropy type MolarEntropy = Quantity DMolarEntropy type MolarHeatCapacity = Quantity DMolarHeatCapacity type DExposure = Dim Zero Neg1 Pos1 Pos1 Zero Zero Zero type Exposure = Quantity DExposure type DAbsorbedDoseRate = Dim Pos2 Zero Neg3 Zero Zero Zero Zero type AbsorbedDoseRate = Quantity DAbsorbedDoseRate type DImpulse = Dim Pos1 Pos1 Neg1 Zero Zero Zero Zero type Impulse = Quantity DImpulse type DMassFlow = Dim Zero Pos1 Neg1 Zero Zero Zero Zero type MassFlow = Quantity DMassFlow type DGravitationalParameter = Dim Pos3 Zero Neg2 Zero Zero Zero Zero type GravitationalParameter = Quantity DGravitationalParameter type Angle = PlaneAngle type Thrust = Force type EnergyPerUnitMass = SpecificEnergy -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional.SIUnits deca :: (Num a) => Unit d a -> Unit d a hecto :: (Num a) => Unit d a -> Unit d a kilo :: (Num a) => Unit d a -> Unit d a mega :: (Num a) => Unit d a -> Unit d a giga :: (Num a) => Unit d a -> Unit d a tera :: (Num a) => Unit d a -> Unit d a peta :: (Num a) => Unit d a -> Unit d a exa :: (Num a) => Unit d a -> Unit d a zetta :: (Num a) => Unit d a -> Unit d a yotta :: (Num a) => Unit d a -> Unit d a deka :: (Num a) => Unit d a -> Unit d a centi :: (Fractional a) => Unit d a -> Unit d a milli :: (Fractional a) => Unit d a -> Unit d a micro :: (Fractional a) => Unit d a -> Unit d a nano :: (Fractional a) => Unit d a -> Unit d a pico :: (Fractional a) => Unit d a -> Unit d a femto :: (Fractional a) => Unit d a -> Unit d a atto :: (Fractional a) => Unit d a -> Unit d a zepto :: (Fractional a) => Unit d a -> Unit d a yocto :: (Fractional a) => Unit d a -> Unit d a deci :: (Fractional a) => Unit d a -> Unit d a meter :: (Num a) => Unit DLength a metre :: (Num a) => Unit DLength a gram :: (Fractional a) => Unit DMass a second :: (Num a) => Unit DTime a ampere :: (Num a) => Unit DElectricCurrent a kelvin :: (Num a) => Unit DThermodynamicTemperature a mole :: (Num a) => Unit DAmountOfSubstance a candela :: (Num a) => Unit DLuminousIntensity a fromDiffTime :: (Fractional a) => DiffTime -> Time a toDiffTime :: (Real a, Fractional a) => Time a -> DiffTime radian :: (Fractional a) => Unit DPlaneAngle a steradian :: (Fractional a) => Unit DSolidAngle a hertz :: (Fractional a) => Unit DFrequency a newton :: (Fractional a) => Unit DForce a pascal :: (Fractional a) => Unit DPressure a joule :: (Fractional a) => Unit DEnergy a watt :: (Fractional a) => Unit DPower a coulomb :: (Fractional a) => Unit DElectricCharge a volt :: (Fractional a) => Unit DElectricPotential a farad :: (Fractional a) => Unit DCapacitance a ohm :: (Fractional a) => Unit DElectricResistance a siemens :: (Fractional a) => Unit DElectricConductance a weber :: (Fractional a) => Unit DMagneticFlux a tesla :: (Fractional a) => Unit DMagneticFluxDensity a henry :: (Fractional a) => Unit DInductance a lumen :: (Fractional a) => Unit DLuminousFlux a lux :: (Fractional a) => Unit DIlluminance a degreeCelsius :: (Num a) => Unit DCelsiusTemperature a fromDegreeCelsiusAbsolute :: (Fractional a) => a -> ThermodynamicTemperature a toDegreeCelsiusAbsolute :: (Fractional a) => ThermodynamicTemperature a -> a becquerel :: (Fractional a) => Unit DActivity a gray :: (Fractional a) => Unit DAbsorbedDose a sievert :: (Fractional a) => Unit DDoseEquivalent a hour :: (Num a) => Unit DTime a day :: (Num a) => Unit DTime a minute :: (Num a) => Unit DTime a arcminute :: (Floating a) => Unit DPlaneAngle a arcsecond :: (Floating a) => Unit DPlaneAngle a degree :: (Floating a) => Unit DPlaneAngle a minuteOfArc :: (Floating a) => Unit DPlaneAngle a secondOfArc :: (Floating a) => Unit DPlaneAngle a degreeOfArc :: (Floating a) => Unit DPlaneAngle a liter :: (Fractional a) => Unit DVolume a litre :: (Fractional a) => Unit DVolume a metricTon :: (Fractional a) => Unit DMass a tonne :: (Fractional a) => Unit DMass a module Numeric.Units.Dimensional.Prelude -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional.NonSI electronVolt :: (Fractional a) => Unit DEnergy a unifiedAtomicMassUnit :: (Fractional a) => Unit DMass a foot :: (Fractional a) => Unit DLength a inch :: (Fractional a) => Unit DLength a ounce :: (Fractional a) => Unit DMass a poundMass :: (Fractional a) => Unit DMass a gee :: (Fractional a) => Unit DAcceleration a poundForce :: (Fractional a) => Unit DForce a mile :: (Fractional a) => Unit DLength a nauticalMile :: (Fractional a) => Unit DLength a yard :: (Fractional a) => Unit DLength a revolution :: (Floating a) => Unit DOne a bar :: (Fractional a) => Unit DPressure a teaspoon :: (Fractional a) => Unit DVolume a -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional.Extensible data DExt a n d showDExt :: (NumType n, Show d) => String -> DExt a n d -> String instance (Div n x n', Root d x d') => Root (DExt a n d) x (DExt a n' d') instance (Mul n x n', Pow d x d') => Pow (DExt a n d) x (DExt a n' d') instance (Sum n'' n' n, Div d d' d'', DropZero (DExt a n'' d'') d''') => Div (DExt a n d) (DExt a n' d') d''' instance (Div (Dim l m t i th n j) d d', Negate x x') => Div (Dim l m t i th n j) (DExt a x d) (DExt a x' d') instance (Div d (Dim l m t i th n j) d') => Div (DExt a x d) (Dim l m t i th n j) (DExt a x d') instance (Sum n n' n'', Mul d d' d'', DropZero (DExt a n'' d'') d''') => Mul (DExt a n d) (DExt a n' d') d''' instance (Mul (Dim l m t i th n j) d d') => Mul (Dim l m t i th n j) (DExt a x d) (DExt a x d') instance (Mul d (Dim l m t i th n j) d') => Mul (DExt a x d) (Dim l m t i th n j) (DExt a x d') instance DropZero (DExt a (Neg n) d) (DExt a (Neg n) d) instance DropZero (DExt a (Pos n) d) (DExt a (Pos n) d) instance DropZero (DExt a Zero (DExt a' n d)) (DExt a Zero (DExt a' n d)) instance DropZero (DExt a Zero (Dim l m t i th n j)) (Dim l m t i th j j) -- | Please refer to the literate Haskell code for documentation of both -- API and implementation. module Numeric.Units.Dimensional.CGS data CGSDim lh mh t type DLength = CGSDim Pos2 Zero Zero type DMass = CGSDim Zero Pos2 Zero type DTime = CGSDim Zero Zero Pos1 type DElectricCurrent = CGSDim Pos3 Pos1 Neg2 type DCharge = CGSDim Pos3 Pos1 Neg1 meter :: (Num a) => Unit DLength a gram :: (Num a) => Unit DMass a second :: (Num a) => Unit DTime a ampere :: (Floating a) => Unit DElectricCurrent a franklin :: (Floating a) => Unit DCharge a unit_SI :: (Num a) => Quantity (Dim l m t i th n j) a -> Unit (Dim l m t i th n j) a unit_CGS :: (Floating a, Mul Zero l Zero, Mul Pos2 l l2, Mul Zero m Zero, Mul Pos2 m m2, Mul Zero t Zero, Mul Pos1 t t, Sum l2 Zero l2, Sum Zero m2 m2, Sum m2 Zero m2, Sum Zero t t, Mul Pos3 i il, Mul Pos1 i i, Mul Neg2 i it, Sum l2 il l', Sum m2 i m', Sum t it t') => Quantity (Dim l m t i Zero Zero Zero) a -> Unit (CGSDim l' m' t') a toSI :: (Floating a, Mul Zero l Zero, Mul Pos2 l l2, Mul Zero m Zero, Mul Pos2 m m2, Mul Zero t Zero, Mul Pos1 t t, Sum l2 Zero l2, Sum Zero m2 m2, Sum m2 Zero m2, Sum Zero t t, Mul Pos3 i il, Mul Pos1 i i, Mul Neg2 i it, Sum l2 il l', Sum m2 i m', Sum t it t') => Quantity (CGSDim l' m' t') a -> Quantity (Dim l m t i Zero Zero Zero) a instance (NumType lh, NumType mh, NumType t) => Show (CGSDim lh mh t) instance (Div lh x lh', Div mh x mh', Div t x t') => Root (CGSDim lh mh t) x (CGSDim lh' mh' t') instance (Mul lh x lh', Mul mh x mh', Mul t x t') => Pow (CGSDim lh mh t) x (CGSDim lh' mh' t') instance (Sum lh lh' lh'', Sum mh mh' mh'', Sum t t' t'') => Div (CGSDim lh'' mh'' t'') (CGSDim lh' mh' t') (CGSDim lh mh t) instance (Sum lh lh' lh'', Sum mh mh' mh'', Sum t t' t'') => Mul (CGSDim lh mh t) (CGSDim lh' mh' t') (CGSDim lh'' mh'' t'')