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.Field

  • 1 class
  • 3 values

Class

6 declarations
classclass C a => C a where
#

Field again corresponds to a commutative ring. Division is partially defined and satisfies

   not (isZero b)  ==>  (a * b) / b === a
   not (isZero a)  ==>  a * recip a === one

when it is defined. To safely call division, the program must take type-specific action; e.g., the following is appropriate in many cases:

safeRecip :: (Integral a, Eq a, Field.C a) => a -> Maybe a
safeRecip x =
    let (q,r) = one `divMod` x
    in  toMaybe (isZero r) q

Typical examples include rationals, the real numbers, and rational functions (ratios of polynomial functions). An instance should be typically declared only if most elements are invertible.

Actually, we have also used this type class for non-fields containing lots of units, e.g. residue classes with respect to non-primes and power series. So the restriction not (isZero a) must be better isUnit a.

Minimal definition: recip or (/)

Instances25C, …
  • C DoubleDefined in numeric-prelude-0.4.4 · Algebra.Field
  • C FloatDefined in numeric-prelude-0.4.4 · Algebra.Field
  • C TDefined in numeric-prelude-0.4.4 · Number.FixedPoint.Check
  • C TDefined in numeric-prelude-0.4.4 · Number.GaloisField2p32m5
  • C TDefined in numeric-prelude-0.4.4 · Number.Positional.Check
  • RealFloat a => C (Complex a)Defined in numeric-prelude-0.4.4 · Algebra.Field
  • Fractional a => C (T a)Defined in numeric-prelude-0.4.4 · MathObj.Wrapper.Haskell98
  • Integral a => C (Ratio a)Defined in numeric-prelude-0.4.4 · Algebra.Field
  • C a => C (T a)Defined in numeric-prelude-0.4.4 · MathObj.PowerSeries
  • C a => C (T a)Defined in numeric-prelude-0.4.4 · MathObj.PowerSeries2
  • C a => C (T a)Defined in numeric-prelude-0.4.4 · MathObj.Wrapper.NumericPrelude
  • C a => C (T a)Defined in numeric-prelude-0.4.4 · Number.Complex
  • C a => C (T a)Defined in numeric-prelude-0.4.4 · Number.PartiallyTranscendental
  • C a => C (T a)Defined in numeric-prelude-0.4.4 · Number.Quaternion
  • C a => C (T a)Defined in numeric-prelude-0.4.4 · Algebra.Field
  • C a => C (T a)Defined in numeric-prelude-0.4.4 · Number.ResidueClass.Func
  • (Eq a, C a) => C (T a)Defined in numeric-prelude-0.4.4 · Number.ResidueClass.Check
  • (Ord a, C a) => C (T a)Defined in numeric-prelude-0.4.4 · Number.NonNegative · orphan
  • (C a, C a) => C (T a)Defined in numeric-prelude-0.4.4 · MathObj.LaurentPolynomial
  • (C a, C a) => C (T a)Defined in numeric-prelude-0.4.4 · MathObj.PowerSum
  • (C a, C a) => C (T a)Defined in numeric-prelude-0.4.4 · MathObj.RootSet
  • C v => C (T a v)Defined in numeric-prelude-0.4.4 · Number.OccasionallyScalarExpression
  • C v => C (T a v)Defined in numeric-prelude-0.4.4 · Number.SI
  • (Ord i, C a) => C (T i a)Defined in numeric-prelude-0.4.4 · Number.Physical
  • (IsScalar u, C a) => C (T u a)Defined in numeric-prelude-0.4.4 · Number.DimensionTerm
method(/) :: a -> a -> a
#

Properties

2 declarations
valuepropDivision :: (Eq a, C a, C a) => a -> a -> Property
#

the restriction on the divisor should be isUnit a instead of not (isZero a)