dimensional-1.3: Statically checked physical dimensions, using Type Families and Data Kinds.

Copyright Copyright (C) 2006-2018 Bjorn Buckwalter BSD3 bjorn@buckwalter.se Experimental GHC only? None Haskell2010

Numeric.Units.Dimensional.Coercion

Description

Re-exports the raw Quantity constructor from the Numeric.Units.Dimensional.Internal module, along with coerce, for convenience in converting between raw representations and dimensional values.

Note that use of these constructs requires the user to verify the dimensional safety of the conversion, because the coercion doesn't explicitly mention the unit of the representation. Note also that the Quantity constructor constructs a SQuantity which may have a scale factor other than One.

Note that the haddock documentation doesn't mention the Quantity constructor because it is a part of the Dimensional associated data family, but it is exported by this module.

Synopsis

# Documentation

coerce :: Coercible a b => a -> b #

The function coerce allows you to safely convert between values of types that have the same representation with no run-time overhead. In the simplest case you can use it instead of a newtype constructor, to go from the newtype's concrete type to the abstract type. But it also works in more complicated settings, e.g. converting a list of newtypes to a list of concrete types.

data family Dimensional v :: Dimension -> Type -> Type Source #

A dimensional value, either a Quantity or a Unit, parameterized by its Dimension and representation.

Instances
 Vector Vector a => Vector Vector (SQuantity s d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal MethodsbasicUnsafeFreeze :: PrimMonad m => Mutable Vector (PrimState m) (SQuantity s d a) -> m (Vector (SQuantity s d a)) #basicUnsafeThaw :: PrimMonad m => Vector (SQuantity s d a) -> m (Mutable Vector (PrimState m) (SQuantity s d a)) #basicLength :: Vector (SQuantity s d a) -> Int #basicUnsafeSlice :: Int -> Int -> Vector (SQuantity s d a) -> Vector (SQuantity s d a) #basicUnsafeIndexM :: Monad m => Vector (SQuantity s d a) -> Int -> m (SQuantity s d a) #basicUnsafeCopy :: PrimMonad m => Mutable Vector (PrimState m) (SQuantity s d a) -> Vector (SQuantity s d a) -> m () #elemseq :: Vector (SQuantity s d a) -> SQuantity s d a -> b -> b # MVector MVector a => MVector MVector (SQuantity s d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal MethodsbasicLength :: MVector s0 (SQuantity s d a) -> Int #basicUnsafeSlice :: Int -> Int -> MVector s0 (SQuantity s d a) -> MVector s0 (SQuantity s d a) #basicOverlaps :: MVector s0 (SQuantity s d a) -> MVector s0 (SQuantity s d a) -> Bool #basicUnsafeNew :: PrimMonad m => Int -> m (MVector (PrimState m) (SQuantity s d a)) #basicInitialize :: PrimMonad m => MVector (PrimState m) (SQuantity s d a) -> m () #basicUnsafeReplicate :: PrimMonad m => Int -> SQuantity s d a -> m (MVector (PrimState m) (SQuantity s d a)) #basicUnsafeRead :: PrimMonad m => MVector (PrimState m) (SQuantity s d a) -> Int -> m (SQuantity s d a) #basicUnsafeWrite :: PrimMonad m => MVector (PrimState m) (SQuantity s d a) -> Int -> SQuantity s d a -> m () #basicClear :: PrimMonad m => MVector (PrimState m) (SQuantity s d a) -> m () #basicSet :: PrimMonad m => MVector (PrimState m) (SQuantity s d a) -> SQuantity s d a -> m () #basicUnsafeCopy :: PrimMonad m => MVector (PrimState m) (SQuantity s d a) -> MVector (PrimState m) (SQuantity s d a) -> m () #basicUnsafeMove :: PrimMonad m => MVector (PrimState m) (SQuantity s d a) -> MVector (PrimState m) (SQuantity s d a) -> m () #basicUnsafeGrow :: PrimMonad m => MVector (PrimState m) (SQuantity s d a) -> Int -> m (MVector (PrimState m) (SQuantity s d a)) # Source # Instance detailsDefined in Numeric.Units.Dimensional.Dynamic MethodsdemotableOut :: Quantity d a -> AnyQuantity a Generic1 (Dimensional (DQuantity s) d :: Type -> Type) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Associated Typestype Rep1 (Dimensional (DQuantity s) d) :: k -> Type # Methodsfrom1 :: Dimensional (DQuantity s) d a -> Rep1 (Dimensional (DQuantity s) d) a #to1 :: Rep1 (Dimensional (DQuantity s) d) a -> Dimensional (DQuantity s) d a # Generic1 (Dimensional (DUnit m) d :: Type -> Type) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Associated Typestype Rep1 (Dimensional (DUnit m) d) :: k -> Type # Methodsfrom1 :: Dimensional (DUnit m) d a -> Rep1 (Dimensional (DUnit m) d) a #to1 :: Rep1 (Dimensional (DUnit m) d) a -> Dimensional (DUnit m) d a # KnownVariant v => Functor (Dimensional v d) Source # A Functor instance for Dimensional.Note that this instance is dubious, because it allows you to break the dimensional abstraction. See dmap for more information.Note that, while this instance overlaps with that given for Dimensionless, it is confluent with that instance.Note that this is an orphan instance. Instance detailsDefined in Numeric.Units.Dimensional.Functor Methodsfmap :: (a -> b) -> Dimensional v d a -> Dimensional v d b #(<$) :: a -> Dimensional v d b -> Dimensional v d a # Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Methodsfmap :: (a -> b) -> SQuantity s DOne a -> SQuantity s DOne b #(<$) :: a -> SQuantity s DOne b -> SQuantity s DOne a # Eq1 (SQuantity s d) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal MethodsliftEq :: (a -> b -> Bool) -> SQuantity s d a -> SQuantity s d b -> Bool # Ord1 (SQuantity s d) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal MethodsliftCompare :: (a -> b -> Ordering) -> SQuantity s d a -> SQuantity s d b -> Ordering # NFData a => NFData (Quantity d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Methodsrnf :: Quantity d a -> () # Bounded a => Bounded (SQuantity s d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal MethodsminBound :: SQuantity s d a #maxBound :: SQuantity s d a # Eq a => Eq (Dimensional (DQuantity s) d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Methods(==) :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Bool #(/=) :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Bool # (Typeable s, Typeable d, Data a) => Data (Dimensional (DQuantity s) d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Methodsgfoldl :: (forall d0 b. Data d0 => c (d0 -> b) -> d0 -> c b) -> (forall g. g -> c g) -> Dimensional (DQuantity s) d a -> c (Dimensional (DQuantity s) d a) #gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Dimensional (DQuantity s) d a) #toConstr :: Dimensional (DQuantity s) d a -> Constr #dataTypeOf :: Dimensional (DQuantity s) d a -> DataType #dataCast1 :: Typeable t => (forall d0. Data d0 => c (t d0)) -> Maybe (c (Dimensional (DQuantity s) d a)) #dataCast2 :: Typeable t => (forall d0 e. (Data d0, Data e) => c (t d0 e)) -> Maybe (c (Dimensional (DQuantity s) d a)) #gmapT :: (forall b. Data b => b -> b) -> Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a #gmapQl :: (r -> r' -> r) -> r -> (forall d0. Data d0 => d0 -> r') -> Dimensional (DQuantity s) d a -> r #gmapQr :: (r' -> r -> r) -> r -> (forall d0. Data d0 => d0 -> r') -> Dimensional (DQuantity s) d a -> r #gmapQ :: (forall d0. Data d0 => d0 -> u) -> Dimensional (DQuantity s) d a -> [u] #gmapQi :: Int -> (forall d0. Data d0 => d0 -> u) -> Dimensional (DQuantity s) d a -> u #gmapM :: Monad m => (forall d0. Data d0 => d0 -> m d0) -> Dimensional (DQuantity s) d a -> m (Dimensional (DQuantity s) d a) #gmapMp :: MonadPlus m => (forall d0. Data d0 => d0 -> m d0) -> Dimensional (DQuantity s) d a -> m (Dimensional (DQuantity s) d a) #gmapMo :: MonadPlus m => (forall d0. Data d0 => d0 -> m d0) -> Dimensional (DQuantity s) d a -> m (Dimensional (DQuantity s) d a) # Ord a => Ord (Dimensional (DQuantity s) d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Methodscompare :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Ordering #(<) :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Bool #(<=) :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Bool #(>) :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Bool #(>=) :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Bool #max :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a #min :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a # (KnownDimension d, KnownExactPi s, Show a, Real a) => Show (SQuantity s d a) Source # Uses non-breaking spaces between the value and the unit, and within the unit name. Instance detailsDefined in Numeric.Units.Dimensional.Internal MethodsshowsPrec :: Int -> SQuantity s d a -> ShowS #show :: SQuantity s d a -> String #showList :: [SQuantity s d a] -> ShowS # Show a => Show (Unit m d a) Source # Unit names are shown with non-breaking spaces. Instance detailsDefined in Numeric.Units.Dimensional.Internal MethodsshowsPrec :: Int -> Unit m d a -> ShowS #show :: Unit m d a -> String #showList :: [Unit m d a] -> ShowS # Generic (Dimensional (DQuantity s) d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Associated Typestype Rep (Dimensional (DQuantity s) d a) :: Type -> Type # Methodsfrom :: Dimensional (DQuantity s) d a -> Rep (Dimensional (DQuantity s) d a) x #to :: Rep (Dimensional (DQuantity s) d a) x -> Dimensional (DQuantity s) d a # Generic (Dimensional (DUnit m) d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Associated Typestype Rep (Dimensional (DUnit m) d a) :: Type -> Type # Methodsfrom :: Dimensional (DUnit m) d a -> Rep (Dimensional (DUnit m) d a) x #to :: Rep (Dimensional (DUnit m) d a) x -> Dimensional (DUnit m) d a # Num a => Semigroup (SQuantity s d a) Source # Quantitys of a given Dimension form a Semigroup under addition. Instance detailsDefined in Numeric.Units.Dimensional.Internal Methods(<>) :: SQuantity s d a -> SQuantity s d a -> SQuantity s d a #sconcat :: NonEmpty (SQuantity s d a) -> SQuantity s d a #stimes :: Integral b => b -> SQuantity s d a -> SQuantity s d a # Num a => Monoid (SQuantity s d a) Source # Quantitys of a given Dimension form a Monoid under addition. Instance detailsDefined in Numeric.Units.Dimensional.Internal Methodsmempty :: SQuantity s d a #mappend :: SQuantity s d a -> SQuantity s d a -> SQuantity s d a #mconcat :: [SQuantity s d a] -> SQuantity s d a # Storable a => Storable (SQuantity s d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal MethodssizeOf :: SQuantity s d a -> Int #alignment :: SQuantity s d a -> Int #peekElemOff :: Ptr (SQuantity s d a) -> Int -> IO (SQuantity s d a) #pokeElemOff :: Ptr (SQuantity s d a) -> Int -> SQuantity s d a -> IO () #peekByteOff :: Ptr b -> Int -> IO (SQuantity s d a) #pokeByteOff :: Ptr b -> Int -> SQuantity s d a -> IO () #peek :: Ptr (SQuantity s d a) -> IO (SQuantity s d a) #poke :: Ptr (SQuantity s d a) -> SQuantity s d a -> IO () # AEq a => AEq (Dimensional (DQuantity s) d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Methods(===) :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Bool #(~==) :: Dimensional (DQuantity s) d a -> Dimensional (DQuantity s) d a -> Bool # Unbox a => Unbox (SQuantity s d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal KnownDimension d => HasDimension (Dimensional v d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Methodsdimension :: Dimensional v d a -> Dimension' Source # KnownDimension d => HasDynamicDimension (Dimensional v d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Methods HasInterchangeName (Unit m d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal Methods data MVector v (SQuantity s d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal data MVector v (SQuantity s d a) = MV_Quantity {unMVQ :: MVector v a} data Dimensional (DQuantity s) d a Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal data Dimensional (DQuantity s) d a = Quantity a data Dimensional (DUnit m) d a Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal data Dimensional (DUnit m) d a = Unit !(UnitName m) !ExactPi !a type Rep1 (Dimensional (DQuantity s) d :: Type -> Type) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal type Rep1 (Dimensional (DQuantity s) d :: Type -> Type) = D1 (MetaData "Dimensional" "Numeric.Units.Dimensional.Internal" "dimensional-1.3-7Gh1mp5ZBGaGfkDr7lUYf2" True) (C1 (MetaCons "Quantity" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) Par1)) type Rep1 (Dimensional (DUnit m) d :: Type -> Type) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal type Rep1 (Dimensional (DUnit m) d :: Type -> Type) = D1 (MetaData "Dimensional" "Numeric.Units.Dimensional.Internal" "dimensional-1.3-7Gh1mp5ZBGaGfkDr7lUYf2" False) (C1 (MetaCons "Unit" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (UnitName m)) :*: (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 ExactPi) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) Par1))) type Rep (Dimensional (DQuantity s) d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal type Rep (Dimensional (DQuantity s) d a) = D1 (MetaData "Dimensional" "Numeric.Units.Dimensional.Internal" "dimensional-1.3-7Gh1mp5ZBGaGfkDr7lUYf2" True) (C1 (MetaCons "Quantity" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness NoSourceStrictness DecidedLazy) (Rec0 a))) type Rep (Dimensional (DUnit m) d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal type Rep (Dimensional (DUnit m) d a) = D1 (MetaData "Dimensional" "Numeric.Units.Dimensional.Internal" "dimensional-1.3-7Gh1mp5ZBGaGfkDr7lUYf2" False) (C1 (MetaCons "Unit" PrefixI False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 (UnitName m)) :*: (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 ExactPi) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a)))) data Vector (SQuantity s d a) Source # Instance detailsDefined in Numeric.Units.Dimensional.Internal data Vector (SQuantity s d a) = V_Quantity {unVQ :: Vector a}

unQuantity :: SQuantity s d a -> a Source #

Unwraps a possibly-scaled SQuantity, yielding its underlying representation.

This is a type-restricted version of coerce.