numeric-prelude-0.4.3.1: An experimental alternative hierarchy of numeric type classes

Algebra.Field

Contents

Synopsis

# Class

class C a => C a Source #

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 (/)

Minimal complete definition

Instances
 Source # Instance detailsDefined in Algebra.Field Methods Source # Instance detailsDefined in Algebra.Field Methods Source # Instance detailsDefined in Number.GaloisField2p32m5 Methods(/) :: T -> T -> T Source #recip :: T -> T Source #(^-) :: T -> Integer -> T Source # Source # Instance detailsDefined in Number.FixedPoint.Check Methods(/) :: T -> T -> T Source #recip :: T -> T Source #(^-) :: T -> Integer -> T Source # Source # Instance detailsDefined in Number.Positional.Check Methods(/) :: T -> T -> T Source #recip :: T -> T Source #(^-) :: T -> Integer -> T Source # Integral a => C (Ratio a) Source # Instance detailsDefined in Algebra.Field Methods(/) :: Ratio a -> Ratio a -> Ratio a Source #recip :: Ratio a -> Ratio a Source #(^-) :: Ratio a -> Integer -> Ratio a Source # RealFloat a => C (Complex a) Source # Instance detailsDefined in Algebra.Field Methods(/) :: Complex a -> Complex a -> Complex a Source #recip :: Complex a -> Complex a Source #(^-) :: Complex a -> Integer -> Complex a Source # (Ord a, C a) => C (T a) Source # Instance detailsDefined in Number.NonNegative Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # C a => C (T a) Source # Instance detailsDefined in Algebra.Field Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # Fractional a => C (T a) Source # Instance detailsDefined in MathObj.Wrapper.Haskell98 Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # C a => C (T a) Source # Instance detailsDefined in Number.ResidueClass.Func Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # (Eq a, C a) => C (T a) Source # Instance detailsDefined in Number.ResidueClass.Check Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # C a => C (T a) Source # Instance detailsDefined in Number.PartiallyTranscendental Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # C a => C (T a) Source # Instance detailsDefined in MathObj.PowerSeries Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # C a => C (T a) Source # Instance detailsDefined in MathObj.PowerSeries2 Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # (C a, C a) => C (T a) Source # Instance detailsDefined in MathObj.PowerSum Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # (C a, C a) => C (T a) Source # Instance detailsDefined in MathObj.RootSet Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # C a => C (T a) Source # Instance detailsDefined in Number.Complex Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # C a => C (T a) Source # Instance detailsDefined in Number.Quaternion Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # (C a, C a) => C (T a) Source # Instance detailsDefined in MathObj.LaurentPolynomial Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # C a => C (T a) Source # Instance detailsDefined in MathObj.Wrapper.NumericPrelude Methods(/) :: T a -> T a -> T a Source #recip :: T a -> T a Source #(^-) :: T a -> Integer -> T a Source # C v => C (T a v) Source # Instance detailsDefined in Number.OccasionallyScalarExpression Methods(/) :: T a v -> T a v -> T a v Source #recip :: T a v -> T a v Source #(^-) :: T a v -> Integer -> T a v Source # (IsScalar u, C a) => C (T u a) Source # Instance detailsDefined in Number.DimensionTerm Methods(/) :: T u a -> T u a -> T u a Source #recip :: T u a -> T u a Source #(^-) :: T u a -> Integer -> T u a Source # (Ord i, C a) => C (T i a) Source # Instance detailsDefined in Number.Physical Methods(/) :: T i a -> T i a -> T i a Source #recip :: T i a -> T i a Source #(^-) :: T i a -> Integer -> T i a Source # C v => C (T a v) Source # Instance detailsDefined in Number.SI Methods(/) :: T a v -> T a v -> T a v Source #recip :: T a v -> T a v Source #(^-) :: T a v -> Integer -> T a v Source #

(/) :: C a => a -> a -> a infixl 7 Source #

recip :: C a => a -> a Source #

fromRational :: C a => Rational -> a Source #

Needed to work around shortcomings in GHC.

(^-) :: C a => a -> Integer -> a infixr 8 Source #

# Properties

propDivision :: (Eq a, C a, C a) => a -> a -> Property Source #

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

propReciprocal :: (Eq a, C a, C a) => a -> Property Source #