numhask-0.2.3.1: numeric classes

Safe HaskellNone
LanguageHaskell2010

NumHask.Algebra

Contents

Description

The basic algebraic class structure of a number.

import NumHask.Algebra
import Prelude hiding (Integral(..), (*), (**), (+), (-), (/), (^), (^^), abs, acos, acosh, asin, asinh, atan, atan2, atanh, ceiling, cos, cosh, exp, floor, fromInteger, fromIntegral, log, logBase, negate, pi, product, recip, round, sin, sinh, sqrt, sum, tan, tanh, toInteger, fromRational)
Synopsis

Mapping from Num

Num is a very old part of haskell, and a lot of different numeric concepts are tossed in there. The closest analogue in numhask is the Ring class, which combines the classical +, - and *, together with the distribution laws.

No attempt is made, however, to reconstruct the particular combination of laws and classes that represent the old Num. A rough mapping of Num to numhask classes follows:

-- | Basic numeric class.
class  Num a  where
   {-# MINIMAL (+), (*), abs, signum, fromInteger, (negate | (-)) #-}

   (+), (-), (*)       :: a -> a -> a
   -- | Unary negation.
   negate              :: a -> a

+ is a function of the Additive class, - is a function of the AdditiveGroup class, and * is a function of the Multiplicative class. negate is specifically in the AdditiveInvertible class. There are many useful constructions between negate and (-), involving cancellative properties.

   -- | Absolute value.
   abs                 :: a -> a
   -- | Sign of a number.
   -- The functions 'abs' and 'signum' should satisfy the law:
   --
   -- > abs x * signum x == x
   --
   -- For real numbers, the 'signum' is either @-1@ (negative), @0@ (zero)
   -- or @1@ (positive).
   signum              :: a -> a

abs is a function in the Signed class. The concept of an absolute value of a number can include situations where the domain and codomain are different, and size as a function in the Normed class is supplied for these cases.

sign replaces signum, because signum is a heinous name.

   -- | Conversion from an 'Integer'.
   -- An integer literal represents the application of the function
   -- 'fromInteger' to the appropriate value of type 'Integer',
   -- so such literals have type @('Num' a) => a@.
   fromInteger         :: Integer -> a

fromInteger is given its own class FromInteger

data Complex a #

Complex numbers are an algebraic type.

For a complex number z, abs z is a number with the magnitude of z, but oriented in the positive real direction, whereas sign z has the phase of z, but unit magnitude.

The Foldable and Traversable instances traverse the real part first.

Constructors

!a :+ !a infix 6

forms a complex number from its real and imaginary rectangular components.

Instances
Functor Complex # 
Instance details

Defined in NumHask.Data.Complex

Methods

fmap :: (a -> b) -> Complex a -> Complex b #

(<$) :: a -> Complex b -> Complex a #

Foldable Complex # 
Instance details

Defined in NumHask.Data.Complex

Methods

fold :: Monoid m => Complex m -> m #

foldMap :: Monoid m => (a -> m) -> Complex a -> m #

foldr :: (a -> b -> b) -> b -> Complex a -> b #

foldr' :: (a -> b -> b) -> b -> Complex a -> b #

foldl :: (b -> a -> b) -> b -> Complex a -> b #

foldl' :: (b -> a -> b) -> b -> Complex a -> b #

foldr1 :: (a -> a -> a) -> Complex a -> a #

foldl1 :: (a -> a -> a) -> Complex a -> a #

toList :: Complex a -> [a] #

null :: Complex a -> Bool #

length :: Complex a -> Int #

elem :: Eq a => a -> Complex a -> Bool #

maximum :: Ord a => Complex a -> a #

minimum :: Ord a => Complex a -> a #

sum :: Num a => Complex a -> a #

product :: Num a => Complex a -> a #

Traversable Complex # 
Instance details

Defined in NumHask.Data.Complex

Methods

traverse :: Applicative f => (a -> f b) -> Complex a -> f (Complex b) #

sequenceA :: Applicative f => Complex (f a) -> f (Complex a) #

mapM :: Monad m => (a -> m b) -> Complex a -> m (Complex b) #

sequence :: Monad m => Complex (m a) -> m (Complex a) #

Eq a => Eq (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

(==) :: Complex a -> Complex a -> Bool #

(/=) :: Complex a -> Complex a -> Bool #

Data a => Data (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Complex a -> c (Complex a) #

gunfold :: (forall b r. Data b => c (b -> r) -> c r) -> (forall r. r -> c r) -> Constr -> c (Complex a) #

toConstr :: Complex a -> Constr #

dataTypeOf :: Complex a -> DataType #

dataCast1 :: Typeable t => (forall d. Data d => c (t d)) -> Maybe (c (Complex a)) #

dataCast2 :: Typeable t => (forall d e. (Data d, Data e) => c (t d e)) -> Maybe (c (Complex a)) #

gmapT :: (forall b. Data b => b -> b) -> Complex a -> Complex a #

gmapQl :: (r -> r' -> r) -> r -> (forall d. Data d => d -> r') -> Complex a -> r #

gmapQr :: (r' -> r -> r) -> r -> (forall d. Data d => d -> r') -> Complex a -> r #

gmapQ :: (forall d. Data d => d -> u) -> Complex a -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Complex a -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Complex a -> m (Complex a) #

Read a => Read (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Show a => Show (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

showsPrec :: Int -> Complex a -> ShowS #

show :: Complex a -> String #

showList :: [Complex a] -> ShowS #

Generic (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Associated Types

type Rep (Complex a) :: * -> * #

Methods

from :: Complex a -> Rep (Complex a) x #

to :: Rep (Complex a) x -> Complex a #

AdditiveGroup a => AdditiveGroup (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

(-) :: Complex a -> Complex a -> Complex a #

Additive a => Additive (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

(+) :: Complex a -> Complex a -> Complex a #

AdditiveInvertible a => AdditiveInvertible (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

negate :: Complex a -> Complex a #

AdditiveCommutative a => AdditiveCommutative (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

AdditiveAssociative a => AdditiveAssociative (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

AdditiveUnital a => AdditiveUnital (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

zero :: Complex a #

AdditiveMagma a => AdditiveMagma (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

plus :: Complex a -> Complex a -> Complex a #

(MultiplicativeUnital a, MultiplicativeAssociative a, MultiplicativeInvertible a, AdditiveGroup a) => MultiplicativeGroup (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

(/) :: Complex a -> Complex a -> Complex a #

(MultiplicativeUnital a, MultiplicativeAssociative a, AdditiveGroup a) => Multiplicative (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

(*) :: Complex a -> Complex a -> Complex a #

(AdditiveGroup a, MultiplicativeInvertible a) => MultiplicativeInvertible (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

recip :: Complex a -> Complex a #

(MultiplicativeMagma a, AdditiveGroup a) => MultiplicativeCommutative (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

(AdditiveGroup a, MultiplicativeAssociative a) => MultiplicativeAssociative (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

(AdditiveUnital a, AdditiveGroup a, MultiplicativeUnital a) => MultiplicativeUnital (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

one :: Complex a #

(MultiplicativeMagma a, AdditiveGroup a) => MultiplicativeMagma (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

times :: Complex a -> Complex a -> Complex a #

(Distribution a, AdditiveGroup a) => Distribution (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

(Semiring a, AdditiveGroup a) => InvolutiveRing (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Methods

adj :: Complex a -> Complex a #

(MultiplicativeAssociative a, MultiplicativeUnital a, AdditiveGroup a, Semiring a) => CRing (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

(Semiring a, AdditiveGroup a) => Ring (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

(Semiring a, AdditiveGroup a) => Semiring (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

(Ord a, TrigField a, ExpField a) => ExpField (Complex a) #

todo: bottom is here somewhere???

Instance details

Defined in NumHask.Data.Complex

Methods

exp :: Complex a -> Complex a #

log :: Complex a -> Complex a #

logBase :: Complex a -> Complex a -> Complex a #

(**) :: Complex a -> Complex a -> Complex a #

sqrt :: Complex a -> Complex a #

(MultiplicativeGroup a, AdditiveGroup a, Semiring a) => Field (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

Generic1 Complex # 
Instance details

Defined in NumHask.Data.Complex

Associated Types

type Rep1 Complex :: k -> * #

Methods

from1 :: Complex a -> Rep1 Complex a #

to1 :: Rep1 Complex a -> Complex a #

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

Defined in NumHask.Data.Complex

Methods

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

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

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

(Multiplicative a, ExpField a, Normed a a) => Normed (Complex a) a # 
Instance details

Defined in NumHask.Data.Complex

Methods

normL1 :: Complex a -> a #

normL2 :: Complex a -> a #

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

type Rep (Complex a) # 
Instance details

Defined in NumHask.Data.Complex

type Rep (Complex a) = D1 (MetaData "Complex" "NumHask.Data.Complex" "numhask-0.2.3.1-5FbBg4YG6PL6iNL0vQctqA" False) (C1 (MetaCons ":+" (InfixI NotAssociative 6) False) (S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a) :*: S1 (MetaSel (Nothing :: Maybe Symbol) NoSourceUnpackedness SourceStrict DecidedStrict) (Rec0 a)))
type Rep1 Complex # 
Instance details

Defined in NumHask.Data.Complex