numhask-0.2.3.1: numeric classes

Safe HaskellNone
LanguageHaskell2010

NumHask.Algebra.Metric

Description

Metric classes

Synopsis

Documentation

class MultiplicativeUnital a => Signed a where Source #

signum from base is not an operator replicated in numhask, being such a very silly name, and preferred is the much more obvious sign. Compare with Norm and Banach where there is a change in codomain

abs a * sign a == a

Generalising this class tends towards size and direction (abs is the size on the one-dim number line of a vector with its tail at zero, and sign is the direction, right?).

Minimal complete definition

sign, abs

Methods

sign :: a -> a Source #

abs :: a -> a Source #

class Normed a b where Source #

L1 and L2 norms are provided for potential speedups, as well as the generalized p-norm.

for p >= 1

normLp p a >= zero
normLp p zero == zero

Note that the Normed codomain can be different to the domain.

Minimal complete definition

normL1, normL2, normLp

Methods

normL1 :: a -> b Source #

normL2 :: a -> b Source #

normLp :: b -> a -> b Source #

Instances

Normed Double Double Source # 
Normed Float Float Source # 
Normed Int Int Source # 

Methods

normL1 :: Int -> Int Source #

normL2 :: Int -> Int Source #

normLp :: Int -> Int -> Int Source #

Normed Int8 Int8 Source # 
Normed Int16 Int16 Source # 
Normed Int32 Int32 Source # 
Normed Int64 Int64 Source # 
Normed Integer Integer Source # 
Normed Natural Natural Source # 
Normed Word Word Source # 
Normed Word8 Word8 Source # 
Normed Word16 Word16 Source # 
Normed Word32 Word32 Source # 
Normed Word64 Word64 Source # 
(Multiplicative a, ExpField a, Normed a a) => Normed (Complex a) a Source # 

Methods

normL1 :: Complex a -> a Source #

normL2 :: Complex a -> a Source #

normLp :: a -> Complex a -> a Source #

(Multiplicative a, ExpField a, Normed a a) => Normed (Complex a) a Source # 

Methods

normL1 :: Complex a -> a Source #

normL2 :: Complex a -> a Source #

normLp :: a -> Complex a -> a Source #

(Ord a, Integral a, Signed a, AdditiveInvertible a) => Normed (Ratio a) (Ratio a) Source # 

Methods

normL1 :: Ratio a -> Ratio a Source #

normL2 :: Ratio a -> Ratio a Source #

normLp :: Ratio a -> Ratio a -> Ratio a Source #

class Metric a b where Source #

distance between numbers using L1, L2 or Lp-norms

distanceL2 a b >= zero
distanceL2 a a == zero
\a b c -> distanceL2 a c + distanceL2 b c - distanceL2 a b >= zero &&
          distanceL2 a b + distanceL2 b c - distanceL2 a c >= zero &&
          distanceL2 a b + distanceL2 a c - distanceL2 b c >= zero &&

Minimal complete definition

distanceL1, distanceL2, distanceLp

Methods

distanceL1 :: a -> a -> b Source #

distanceL2 :: a -> a -> b Source #

distanceLp :: b -> a -> a -> b Source #

Instances

Metric Double Double Source # 
Metric Float Float Source # 
Metric Int Int Source # 
Metric Int8 Int8 Source # 
Metric Int16 Int16 Source # 
Metric Int32 Int32 Source # 
Metric Int64 Int64 Source # 
Metric Integer Integer Source # 
Metric Natural Natural Source # 
Metric Word Word Source # 
Metric Word8 Word8 Source # 
Metric Word16 Word16 Source # 
Metric Word32 Word32 Source # 
Metric Word64 Word64 Source # 
(Multiplicative a, ExpField a, Normed a a) => Metric (Complex a) a Source # 

Methods

distanceL1 :: Complex a -> Complex a -> a Source #

distanceL2 :: Complex a -> Complex a -> a Source #

distanceLp :: a -> Complex a -> Complex a -> a Source #

(Multiplicative a, ExpField a, Normed a a) => Metric (Complex a) a Source # 

Methods

distanceL1 :: Complex a -> Complex a -> a Source #

distanceL2 :: Complex a -> Complex a -> a Source #

distanceLp :: a -> Complex a -> Complex a -> a Source #

(Ord a, Integral a, Signed a, AdditiveGroup a) => Metric (Ratio a) (Ratio a) Source # 

Methods

distanceL1 :: Ratio a -> Ratio a -> Ratio a Source #

distanceL2 :: Ratio a -> Ratio a -> Ratio a Source #

distanceLp :: Ratio a -> Ratio a -> Ratio a -> Ratio a Source #

class (Eq a, AdditiveUnital a) => Epsilon a where Source #

todo: This should probably be split off into some sort of alternative Equality logic, but to what end?

Methods

nearZero :: a -> Bool Source #

aboutEqual :: a -> a -> Bool Source #

aboutEqual :: AdditiveGroup a => a -> a -> Bool Source #

positive :: Signed a => a -> Bool Source #

veryPositive :: Signed a => a -> Bool Source #

veryNegative :: Signed a => a -> Bool Source #

Instances

Epsilon Double Source # 
Epsilon Float Source # 
Epsilon Int Source # 
Epsilon Int8 Source # 
Epsilon Int16 Source # 
Epsilon Int32 Source # 
Epsilon Int64 Source # 
Epsilon Integer Source # 
Epsilon Word Source # 
Epsilon Word8 Source # 
Epsilon Word16 Source # 
Epsilon Word32 Source # 
Epsilon Word64 Source # 
(Epsilon a, AdditiveGroup a) => Epsilon (Complex a) Source # 
(Ord a, Signed a, Integral a, AdditiveGroup a) => Epsilon (Ratio a) Source # 
(Epsilon a, ExpField a, LowerBoundedField a, Ord a) => Epsilon (LogField a) Source # 

(≈) :: Epsilon a => a -> a -> Bool infixl 4 Source #

todo: is utf perfectly acceptable these days?