HORIZON HASKELLDocslts/ghc-9.10.x248f8f02026-10-05Search names, modules, packages, or :: a typeCtrl K

GHC 9.10.3 · lts/ghc-9.10.x · 248f8f0 · 2026-10-05

Modulenumeric-prelude-0.4.4Haskell98

Algebra.DimensionTerm

We already have the dynamically checked physical units provided by Number.Physical and the statically checked ones of the dimensional package of Buckwalter, which require multi-parameter type classes with functional dependencies.

Here we provide a poor man's approach: The units are presented by type terms. There is no canonical form and thus the type checker can not automatically check for equal units. However, if two unit terms represent the same unit, then you can tell the type checker to rewrite one into the other.

You can add more dimensions by introducing more types of class C.

This approach is not entirely safe because you can write your own flawed rewrite rules. It is however more safe than with no units at all.

  • 14 types
  • 2 classes
  • 33 values
classclass Show a => C a
#
Instances11C, …
  • C AngleDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C ChargeDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C InformationDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C LengthDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C MassDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C ScalarDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C TemperatureDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C TimeDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C VoltageDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C a => C (Recip a)Defined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • (C a, C b) => C (Mul a b)Defined in numeric-prelude-0.4.4 · Algebra.DimensionTerm

Type constructors

10 declarations
datadata Scalar
#
Instances3Show, C, IsScalar
  • Show ScalarDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C ScalarDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • IsScalar ScalarDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
datadata Mul a b
#
Instances2Show, C
  • (Show a, Show b) => Show (Mul a b)Defined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • (C a, C b) => C (Mul a b)Defined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
datadata Recip a
#
Instances2Show, C
  • Show a => Show (Recip a)Defined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C a => C (Recip a)Defined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
valuemul :: (C a, C b) => a -> b -> Mul a b
#
value(%*%) :: (C a, C b) => a -> b -> Mul a b
#

Rewrites

15 declarations

Example dimensions

0 declarations

Scalar

classclass C dim => IsScalar dim where
#

This class allows defining instances that are exclusively for Scalar dimension. You won't want to define instances by yourself.

Methods

Instances1IsScalar
  • IsScalar ScalarDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm

Basis dimensions

datadata Length
#
Instances2Show, C
  • Show LengthDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C LengthDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
datadata Time
#
Instances2Show, C
  • Show TimeDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C TimeDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
datadata Mass
#
Instances2Show, C
  • Show MassDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C MassDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
datadata Charge
#
Instances2Show, C
  • Show ChargeDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C ChargeDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
datadata Angle
#
Instances2Show, C
  • Show AngleDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C AngleDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm

Derived dimensions

datadata Voltage
#
Instances2Show, C
  • Show VoltageDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm
  • C VoltageDefined in numeric-prelude-0.4.4 · Algebra.DimensionTerm