dimensional-1.6.1: Statically checked physical dimensions

Copyright | Copyright (C) 2006-2018 Bjorn Buckwalter
License | BSD3
Maintainer | bjorn@buckwalter.se
Stability | Stable
Portability | GHC only
Safe Haskell | Safe-Inferred
Language | Haskell2010

Extensions

- Cpp
- BangPatterns
- DeriveDataTypeable
- DeriveGeneric
- DefaultSignatures

Numeric.Units.Dimensional.Dimensions.TermLevel

Contents

- Type
- Access to Dimension of Dimensional Values
- Dimension Arithmetic
- Synonyms for Base Dimensions
- Deconstruction
- Examining Dynamic Dimensions

Description

This module defines physical dimensions expressed in terms of the SI base dimensions, including arithmetic.

Synopsis

- data Dimension' = Dim' !Int !Int !Int !Int !Int !Int !Int
- class HasDynamicDimension a => HasDimension a where
  - dimension :: a -> Dimension'
- class HasDynamicDimension a where
  - dynamicDimension :: a -> DynamicDimension
- data DynamicDimension
  - = NoDimension
  - | SomeDimension Dimension'
  - | AnyDimension
- (*) :: Dimension' -> Dimension' -> Dimension'
- (/) :: Dimension' -> Dimension' -> Dimension'
- (^) :: Dimension' -> Int -> Dimension'
- recip :: Dimension' -> Dimension'
- nroot :: Int -> Dimension' -> Maybe Dimension'
- sqrt :: Dimension' -> Maybe Dimension'
- cbrt :: Dimension' -> Maybe Dimension'
- dOne :: Dimension'
- dLength :: Dimension'
- dMass :: Dimension'
- dTime :: Dimension'
- dElectricCurrent :: Dimension'
- dThermodynamicTemperature :: Dimension'
- dAmountOfSubstance :: Dimension'
- dLuminousIntensity :: Dimension'
- asList :: Dimension' -> [Int]
- matchDimensions :: DynamicDimension -> DynamicDimension -> DynamicDimension
- isCompatibleWith :: HasDynamicDimension a => a -> Dimension' -> Bool
- hasSomeDimension :: HasDynamicDimension a => a -> Bool

# Type

data Dimension' Source #

A physical dimension, encoded as 7 integers, representing a factorization of the dimension into the 7 SI base dimensions. By convention they are stored in the same order as in the `Dimension` data kind.

Constructors

Dim' !Int !Int !Int !Int !Int !Int !Int |

#### Instances

Instances details

NFData Dimension' Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods rnf :: Dimension' -> () Source #
HasDimension Dimension' Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods dimension :: Dimension' -> Dimension' Source #
HasDynamicDimension Dimension' Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods dynamicDimension :: Dimension' -> DynamicDimension Source #
Monoid Dimension' Source # | The monoid of dimensions under multiplication.
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods mempty :: Dimension' Source # mappend :: Dimension' -> Dimension' -> Dimension' Source # mconcat :: [Dimension'] -> Dimension' Source #
Semigroup Dimension' Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods (<>) :: Dimension' -> Dimension' -> Dimension' Source # sconcat :: NonEmpty Dimension' -> Dimension' Source # stimes :: Integral b => b -> Dimension' -> Dimension' Source #
Data Dimension' Source # |

Instance details

Defined in Numeric.Units.Dimensional.Dimensions.TermLevel

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Dimension' -> c Dimension' Source #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c Dimension' Source #

toConstr :: Dimension' -> Constr Source #

dataTypeOf :: Dimension' -> DataType Source #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c Dimension') Source #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c Dimension') Source #

gmapT :: (forall b. Data b => b -> b) -> Dimension' -> Dimension' Source #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Dimension' -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Dimension' -> r Source #

gmapQ :: (forall d. Data d => d -> u) -> Dimension' -> [u] Source #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Dimension' -> u Source #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Dimension' -> m Dimension' Source #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Dimension' -> m Dimension' Source #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Dimension' -> m Dimension' Source #

Generic Dimension' Source # |

Instance details

Defined in Numeric.Units.Dimensional.Dimensions.TermLevel

Associated Types

type Rep Dimension' |

Instance details

Defined in Numeric.Units.Dimensional.Dimensions.TermLevel

type Rep Dimension' = D1 ('MetaData "Dimension'" "Numeric.Units.Dimensional.Dimensions.TermLevel" "dimensional-1.6.1-DmNxHObAeML5uhkkhNUdgI" 'False) (C1 ('MetaCons "Dim'" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int)))))

Methods

from :: Dimension' -> Rep Dimension' x Source #

to :: Rep Dimension' x -> Dimension' Source #

Show Dimension' Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods showsPrec :: Int -> Dimension' -> ShowS Source # show :: Dimension' -> String Source # showList :: [Dimension'] -> ShowS Source #
Eq Dimension' Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods (==) :: Dimension' -> Dimension' -> Bool Source # (/=) :: Dimension' -> Dimension' -> Bool Source #
Ord Dimension' Source # |

Instance details

Defined in Numeric.Units.Dimensional.Dimensions.TermLevel

Methods

compare :: Dimension' -> Dimension' -> Ordering Source #

(<) :: Dimension' -> Dimension' -> Bool Source #

(<=) :: Dimension' -> Dimension' -> Bool Source #

(>) :: Dimension' -> Dimension' -> Bool Source #

(>=) :: Dimension' -> Dimension' -> Bool Source #

max :: Dimension' -> Dimension' -> Dimension' Source #

min :: Dimension' -> Dimension' -> Dimension' Source #

type Rep Dimension' Source # |

Instance details

Defined in Numeric.Units.Dimensional.Dimensions.TermLevel

type Rep Dimension' = D1 ('MetaData "Dimension'" "Numeric.Units.Dimensional.Dimensions.TermLevel" "dimensional-1.6.1-DmNxHObAeML5uhkkhNUdgI" 'False) (C1 ('MetaCons "Dim'" 'PrefixI 'False) ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int))) :*: ((S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int)) :*: (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int) :*: S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 Int)))))

# Access to Dimension of Dimensional Values

class HasDynamicDimension a => HasDimension a where Source #

Dimensional values inhabit this class, which allows access to a term-level representation of their dimension.

Methods

dimension :: a -> Dimension' Source #

Obtains a term-level representation of a value's dimension.

#### Instances

Instances details

HasDimension Dimension' Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods dimension :: Dimension' -> Dimension' Source #
HasDimension AnyUnit Source # |
Instance details Defined in Numeric.Units.Dimensional.Dynamic Methods dimension :: AnyUnit -> Dimension' Source #
HasDimension (AnyQuantity a) Source # |
Instance details Defined in Numeric.Units.Dimensional.Dynamic Methods dimension :: AnyQuantity a -> Dimension' Source #
(KnownTypeInt l, KnownTypeInt m, KnownTypeInt t, KnownTypeInt i, KnownTypeInt th, KnownTypeInt n, KnownTypeInt j) => HasDimension (Proxy ('Dim l m t i th n j)) Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TypeLevel Methods dimension :: Proxy ('Dim l m t i th n j) -> Dimension' Source #
KnownDimension d => HasDimension (Dimensional v d a) Source # |
Instance details Defined in Numeric.Units.Dimensional.Internal Methods dimension :: Dimensional v d a -> Dimension' Source #

class HasDynamicDimension a where Source #

Dimensional values, or those that are only possibly dimensional, inhabit this class, which allows access to a term-level representation of their dimension.

Minimal complete definition

Nothing

Methods

dynamicDimension :: a -> DynamicDimension Source #

Gets the `DynamicDimension` of a dynamic dimensional value, which may be `NoDimension` if it does not represent a dimensional value of any `Dimension`.

A default implementation is available for types that are also in the `HasDimension` typeclass.

default dynamicDimension :: HasDimension a => a -> DynamicDimension Source #

#### Instances

Instances details

HasDynamicDimension Dimension' Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods dynamicDimension :: Dimension' -> DynamicDimension Source #
HasDynamicDimension DynamicDimension Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods dynamicDimension :: DynamicDimension -> DynamicDimension Source #
HasDynamicDimension AnyUnit Source # |
Instance details Defined in Numeric.Units.Dimensional.Dynamic Methods dynamicDimension :: AnyUnit -> DynamicDimension Source #
HasDynamicDimension (AnyQuantity a) Source # |
Instance details Defined in Numeric.Units.Dimensional.Dynamic Methods dynamicDimension :: AnyQuantity a -> DynamicDimension Source #
HasDynamicDimension (DynQuantity a) Source # |
Instance details Defined in Numeric.Units.Dimensional.Dynamic Methods dynamicDimension :: DynQuantity a -> DynamicDimension Source #
(KnownTypeInt l, KnownTypeInt m, KnownTypeInt t, KnownTypeInt i, KnownTypeInt th, KnownTypeInt n, KnownTypeInt j) => HasDynamicDimension (Proxy ('Dim l m t i th n j)) Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TypeLevel Methods dynamicDimension :: Proxy ('Dim l m t i th n j) -> DynamicDimension Source #
KnownDimension d => HasDynamicDimension (Dimensional v d a) Source # |
Instance details Defined in Numeric.Units.Dimensional.Internal Methods dynamicDimension :: Dimensional v d a -> DynamicDimension Source #

data DynamicDimension Source #

The dimension of a dynamic value, which may not have any dimension at all.

Constructors

NoDimension | The value has no valid dimension.
SomeDimension Dimension' | The value has the given dimension.
AnyDimension | The value may be interpreted as having any dimension.

#### Instances

Instances details

NFData DynamicDimension Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods rnf :: DynamicDimension -> () Source #
HasDynamicDimension DynamicDimension Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods dynamicDimension :: DynamicDimension -> DynamicDimension Source #
Data DynamicDimension Source # |

Instance details

Defined in Numeric.Units.Dimensional.Dimensions.TermLevel

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> DynamicDimension -> c DynamicDimension Source #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c DynamicDimension Source #

toConstr :: DynamicDimension -> Constr Source #

dataTypeOf :: DynamicDimension -> DataType Source #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c DynamicDimension) Source #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c DynamicDimension) Source #

gmapT :: (forall b. Data b => b -> b) -> DynamicDimension -> DynamicDimension Source #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> DynamicDimension -> r Source #

gmapQr :: forall r r'. (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> DynamicDimension -> r Source #

gmapQ :: (forall d. Data d => d -> u) -> DynamicDimension -> [u] Source #

gmapQi :: Int -> (forall d. Data d => d -> u) -> DynamicDimension -> u Source #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> DynamicDimension -> m DynamicDimension Source #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> DynamicDimension -> m DynamicDimension Source #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> DynamicDimension -> m DynamicDimension Source #

Generic DynamicDimension Source # |

Instance details

Defined in Numeric.Units.Dimensional.Dimensions.TermLevel

Associated Types

type Rep DynamicDimension |

Instance details

Defined in Numeric.Units.Dimensional.Dimensions.TermLevel

type Rep DynamicDimension = D1 ('MetaData "DynamicDimension" "Numeric.Units.Dimensional.Dimensions.TermLevel" "dimensional-1.6.1-DmNxHObAeML5uhkkhNUdgI" 'False) (C1 ('MetaCons "NoDimension" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "SomeDimension" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Dimension')) :+: C1 ('MetaCons "AnyDimension" 'PrefixI 'False) (U1 :: Type -> Type)))

Methods

from :: DynamicDimension -> Rep DynamicDimension x Source #

to :: Rep DynamicDimension x -> DynamicDimension Source #

Show DynamicDimension Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods showsPrec :: Int -> DynamicDimension -> ShowS Source # show :: DynamicDimension -> String Source # showList :: [DynamicDimension] -> ShowS Source #
Eq DynamicDimension Source # |
Instance details Defined in Numeric.Units.Dimensional.Dimensions.TermLevel Methods (==) :: DynamicDimension -> DynamicDimension -> Bool Source # (/=) :: DynamicDimension -> DynamicDimension -> Bool Source #
Ord DynamicDimension Source # |

Instance details

Defined in Numeric.Units.Dimensional.Dimensions.TermLevel

Methods

compare :: DynamicDimension -> DynamicDimension -> Ordering Source #

(<) :: DynamicDimension -> DynamicDimension -> Bool Source #

(<=) :: DynamicDimension -> DynamicDimension -> Bool Source #

(>) :: DynamicDimension -> DynamicDimension -> Bool Source #

(>=) :: DynamicDimension -> DynamicDimension -> Bool Source #

max :: DynamicDimension -> DynamicDimension -> DynamicDimension Source #

min :: DynamicDimension -> DynamicDimension -> DynamicDimension Source #

type Rep DynamicDimension Source # |

Instance details

Defined in Numeric.Units.Dimensional.Dimensions.TermLevel

type Rep DynamicDimension = D1 ('MetaData "DynamicDimension" "Numeric.Units.Dimensional.Dimensions.TermLevel" "dimensional-1.6.1-DmNxHObAeML5uhkkhNUdgI" 'False) (C1 ('MetaCons "NoDimension" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "SomeDimension" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'NoSourceStrictness 'DecidedLazy) (Rec0 Dimension')) :+: C1 ('MetaCons "AnyDimension" 'PrefixI 'False) (U1 :: Type -> Type)))

# Dimension Arithmetic

(*) :: Dimension' -> Dimension' -> Dimension' infixl 7 Source #

Forms the product of two dimensions.

(/) :: Dimension' -> Dimension' -> Dimension' infixl 7 Source #

Forms the quotient of two dimensions.

(^) :: Dimension' -> Int -> Dimension' infixr 8 Source #

Raises a dimension to an integer power.

recip :: Dimension' -> Dimension' Source #

Forms the reciprocal of a dimension.

nroot :: Int -> Dimension' -> Maybe Dimension' Source #

Takes the nth root of a dimension, if it exists.

n must not be zero.

    nroot (negate n) d == nroot n (recip d)

sqrt :: Dimension' -> Maybe Dimension' Source #

Takes the square root of a dimension, if it exists.

    sqrt d == nroot 2 d

cbrt :: Dimension' -> Maybe Dimension' Source #

Takes the cube root of a dimension, if it exists.

    cbrt d == nroot 3 d

# Synonyms for Base Dimensions

dOne :: Dimension' Source #

The dimension of dimensionless values.

dLength :: Dimension' Source #

dMass :: Dimension' Source #

dTime :: Dimension' Source #

dElectricCurrent :: Dimension' Source #

dThermodynamicTemperature :: Dimension' Source #

dAmountOfSubstance :: Dimension' Source #

dLuminousIntensity :: Dimension' Source #

# Deconstruction

asList :: Dimension' -> [Int] Source #

Converts a dimension to a list of 7 integers, representing the exponent associated with each of the 7 SI base dimensions in the standard order.

# Examining Dynamic Dimensions

matchDimensions :: DynamicDimension -> DynamicDimension -> DynamicDimension Source #

Combines two `DynamicDimension`s, determining the `DynamicDimension` of a quantity that must match both inputs.

This is the lattice meet operation for `DynamicDimension`.

isCompatibleWith :: HasDynamicDimension a => a -> Dimension' -> Bool Source #

Determines if a value that has a `DynamicDimension` is compatible with a specified `Dimension'`.

hasSomeDimension :: HasDynamicDimension a => a -> Bool Source #

Determines if a value that has a `DynamicDimension` in fact has any valid dimension at all.