base-4.16.1.0: Basic libraries

GHC.Num

Description

The Num class and the Integer type.

Synopsis

# Documentation

class Num a where Source #

Basic numeric class.

The Haskell Report defines no laws for Num. However, (+) and (*) are customarily expected to define a ring and have the following properties:

Associativity of (+)
(x + y) + z = x + (y + z)
Commutativity of (+)
x + y = y + x
fromInteger 0 is the additive identity
x + fromInteger 0 = x
negate gives the additive inverse
x + negate x = fromInteger 0
Associativity of (*)
(x * y) * z = x * (y * z)
fromInteger 1 is the multiplicative identity
x * fromInteger 1 = x and fromInteger 1 * x = x
Distributivity of (*) with respect to (+)
a * (b + c) = (a * b) + (a * c) and (b + c) * a = (b * a) + (c * a)

Note that it isn't customarily expected that a type instance of both Num and Ord implement an ordered ring. Indeed, in base only Integer and Rational do.

Minimal complete definition

(+), (*), abs, signum, fromInteger, (negate | (-))

Methods

(+) :: a -> a -> a infixl 6 Source #

(-) :: a -> a -> a infixl 6 Source #

(*) :: a -> a -> a infixl 7 Source #

negate :: a -> a Source #

Unary negation.

abs :: a -> a Source #

Absolute value.

signum :: a -> a Source #

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

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.

#### Instances

Instances details
 Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods(+) :: CInt -> CInt -> CInt Source #(-) :: CInt -> CInt -> CInt Source #(*) :: CInt -> CInt -> CInt Source # Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.C.Types Methods Source # Instance detailsDefined in Foreign.Ptr Methods Source # Instance detailsDefined in Foreign.Ptr Methods Source # Since: base-2.1 Instance detailsDefined in GHC.Int Methods Source # Since: base-2.1 Instance detailsDefined in GHC.Int Methods Source # Since: base-2.1 Instance detailsDefined in GHC.Int Methods Source # Since: base-2.1 Instance detailsDefined in GHC.Int Methods(+) :: Int8 -> Int8 -> Int8 Source #(-) :: Int8 -> Int8 -> Int8 Source #(*) :: Int8 -> Int8 -> Int8 Source # Source # Since: base-2.1 Instance detailsDefined in GHC.Word Methods Source # Since: base-2.1 Instance detailsDefined in GHC.Word Methods Source # Since: base-2.1 Instance detailsDefined in GHC.Word Methods Source # Since: base-2.1 Instance detailsDefined in GHC.Word Methods Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods(+) :: CCc -> CCc -> CCc Source #(-) :: CCc -> CCc -> CCc Source #(*) :: CCc -> CCc -> CCc Source #abs :: CCc -> CCc Source # Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods(+) :: CDev -> CDev -> CDev Source #(-) :: CDev -> CDev -> CDev Source #(*) :: CDev -> CDev -> CDev Source # Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods(+) :: CGid -> CGid -> CGid Source #(-) :: CGid -> CGid -> CGid Source #(*) :: CGid -> CGid -> CGid Source # Source # Instance detailsDefined in System.Posix.Types Methods(+) :: CId -> CId -> CId Source #(-) :: CId -> CId -> CId Source #(*) :: CId -> CId -> CId Source #abs :: CId -> CId Source # Source # Instance detailsDefined in System.Posix.Types Methods(+) :: CIno -> CIno -> CIno Source #(-) :: CIno -> CIno -> CIno Source #(*) :: CIno -> CIno -> CIno Source # Source # Instance detailsDefined in System.Posix.Types Methods(+) :: CKey -> CKey -> CKey Source #(-) :: CKey -> CKey -> CKey Source #(*) :: CKey -> CKey -> CKey Source # Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods(+) :: COff -> COff -> COff Source #(-) :: COff -> COff -> COff Source #(*) :: COff -> COff -> COff Source # Source # Instance detailsDefined in System.Posix.Types Methods(+) :: CPid -> CPid -> CPid Source #(-) :: CPid -> CPid -> CPid Source #(*) :: CPid -> CPid -> CPid Source # Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods Source # Instance detailsDefined in System.Posix.Types Methods(+) :: CUid -> CUid -> CUid Source #(-) :: CUid -> CUid -> CUid Source #(*) :: CUid -> CUid -> CUid Source # Source # Instance detailsDefined in System.Posix.Types Methods(+) :: Fd -> Fd -> Fd Source #(-) :: Fd -> Fd -> Fd Source #(*) :: Fd -> Fd -> Fd Source #abs :: Fd -> Fd Source # Source # Since: base-2.1 Instance detailsDefined in GHC.Num Methods Source # Note that Natural's Num instance isn't a ring: no element but 0 has an additive inverse. It is a semiring though.Since: base-4.8.0.0 Instance detailsDefined in GHC.Num Methods Source # Note that due to the presence of NaN, not all elements of Double have an additive inverse.>>> 0/0 + (negate 0/0 :: Double) NaN Also note that due to the presence of -0, Double's Num instance doesn't have an additive identity>>> 0 + (-0 :: Double) 0.0 Since: base-2.1 Instance detailsDefined in GHC.Float Methods Source # Note that due to the presence of NaN, not all elements of Float have an additive inverse.>>> 0/0 + (negate 0/0 :: Float) NaN Also note that due to the presence of -0, Float's Num instance doesn't have an additive identity>>> 0 + (-0 :: Float) 0.0 Since: base-2.1 Instance detailsDefined in GHC.Float Methods Source # Since: base-2.1 Instance detailsDefined in GHC.Num Methods(+) :: Int -> Int -> Int Source #(-) :: Int -> Int -> Int Source #(*) :: Int -> Int -> Int Source #abs :: Int -> Int Source # Source # Since: base-2.1 Instance detailsDefined in GHC.Num Methods(+) :: Word -> Word -> Word Source #(-) :: Word -> Word -> Word Source #(*) :: Word -> Word -> Word Source # RealFloat a => Num (Complex a) Source # Since: base-2.1 Instance detailsDefined in Data.Complex Methods(+) :: Complex a -> Complex a -> Complex a Source #(-) :: Complex a -> Complex a -> Complex a Source #(*) :: Complex a -> Complex a -> Complex a Source #negate :: Complex a -> Complex a Source #abs :: Complex a -> Complex a Source #signum :: Complex a -> Complex a Source # Num a => Num (Identity a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Identity Methods(+) :: Identity a -> Identity a -> Identity a Source #(-) :: Identity a -> Identity a -> Identity a Source #(*) :: Identity a -> Identity a -> Identity a Source #abs :: Identity a -> Identity a Source # Num a => Num (Down a) Source # Since: base-4.11.0.0 Instance detailsDefined in Data.Ord Methods(+) :: Down a -> Down a -> Down a Source #(-) :: Down a -> Down a -> Down a Source #(*) :: Down a -> Down a -> Down a Source #negate :: Down a -> Down a Source #abs :: Down a -> Down a Source #signum :: Down a -> Down a Source # Num a => Num (Max a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(+) :: Max a -> Max a -> Max a Source #(-) :: Max a -> Max a -> Max a Source #(*) :: Max a -> Max a -> Max a Source #negate :: Max a -> Max a Source #abs :: Max a -> Max a Source #signum :: Max a -> Max a Source # Num a => Num (Min a) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Semigroup Methods(+) :: Min a -> Min a -> Min a Source #(-) :: Min a -> Min a -> Min a Source #(*) :: Min a -> Min a -> Min a Source #negate :: Min a -> Min a Source #abs :: Min a -> Min a Source #signum :: Min a -> Min a Source # Num a => Num (Product a) Source # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(+) :: Product a -> Product a -> Product a Source #(-) :: Product a -> Product a -> Product a Source #(*) :: Product a -> Product a -> Product a Source #negate :: Product a -> Product a Source #abs :: Product a -> Product a Source #signum :: Product a -> Product a Source # Num a => Num (Sum a) Source # Since: base-4.7.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(+) :: Sum a -> Sum a -> Sum a Source #(-) :: Sum a -> Sum a -> Sum a Source #(*) :: Sum a -> Sum a -> Sum a Source #negate :: Sum a -> Sum a Source #abs :: Sum a -> Sum a Source #signum :: Sum a -> Sum a Source # Integral a => Num (Ratio a) Source # Since: base-2.0.1 Instance detailsDefined in GHC.Real Methods(+) :: Ratio a -> Ratio a -> Ratio a Source #(-) :: Ratio a -> Ratio a -> Ratio a Source #(*) :: Ratio a -> Ratio a -> Ratio a Source #negate :: Ratio a -> Ratio a Source #abs :: Ratio a -> Ratio a Source #signum :: Ratio a -> Ratio a Source # HasResolution a => Num (Fixed a) Source # Since: base-2.1 Instance detailsDefined in Data.Fixed Methods(+) :: Fixed a -> Fixed a -> Fixed a Source #(-) :: Fixed a -> Fixed a -> Fixed a Source #(*) :: Fixed a -> Fixed a -> Fixed a Source #negate :: Fixed a -> Fixed a Source #abs :: Fixed a -> Fixed a Source #signum :: Fixed a -> Fixed a Source # Num a => Num (Op a b) Source # Instance detailsDefined in Data.Functor.Contravariant Methods(+) :: Op a b -> Op a b -> Op a b Source #(-) :: Op a b -> Op a b -> Op a b Source #(*) :: Op a b -> Op a b -> Op a b Source #negate :: Op a b -> Op a b Source #abs :: Op a b -> Op a b Source #signum :: Op a b -> Op a b Source #fromInteger :: Integer -> Op a b Source # Num a => Num (Const a b) Source # Since: base-4.9.0.0 Instance detailsDefined in Data.Functor.Const Methods(+) :: Const a b -> Const a b -> Const a b Source #(-) :: Const a b -> Const a b -> Const a b Source #(*) :: Const a b -> Const a b -> Const a b Source #negate :: Const a b -> Const a b Source #abs :: Const a b -> Const a b Source #signum :: Const a b -> Const a b Source # (Applicative f, Num a) => Num (Ap f a) Source # Note that even if the underlying Num and Applicative instances are lawful, for most Applicatives, this instance will not be lawful. If you use this instance with the list Applicative, the following customary laws will not hold:Commutativity:>>> Ap [10,20] + Ap [1,2] Ap {getAp = [11,12,21,22]} >>> Ap [1,2] + Ap [10,20] Ap {getAp = [11,21,12,22]} Additive inverse:>>> Ap [] + negate (Ap []) Ap {getAp = []} >>> fromInteger 0 :: Ap [] Int Ap {getAp = [0]} Distributivity:>>> Ap [1,2] * (3 + 4) Ap {getAp = [7,14]} >>> (Ap [1,2] * 3) + (Ap [1,2] * 4) Ap {getAp = [7,11,10,14]} Since: base-4.12.0.0 Instance detailsDefined in Data.Monoid Methods(+) :: Ap f a -> Ap f a -> Ap f a Source #(-) :: Ap f a -> Ap f a -> Ap f a Source #(*) :: Ap f a -> Ap f a -> Ap f a Source #negate :: Ap f a -> Ap f a Source #abs :: Ap f a -> Ap f a Source #signum :: Ap f a -> Ap f a Source #fromInteger :: Integer -> Ap f a Source # Num (f a) => Num (Alt f a) Source # Since: base-4.8.0.0 Instance detailsDefined in Data.Semigroup.Internal Methods(+) :: Alt f a -> Alt f a -> Alt f a Source #(-) :: Alt f a -> Alt f a -> Alt f a Source #(*) :: Alt f a -> Alt f a -> Alt f a Source #negate :: Alt f a -> Alt f a Source #abs :: Alt f a -> Alt f a Source #signum :: Alt f a -> Alt f a Source #fromInteger :: Integer -> Alt f a Source #

the same as flip (-).
Because - is treated specially in the Haskell grammar, (- e) is not a section, but an application of prefix negation. However, (subtract exp) is equivalent to the disallowed section.