extended-reals-0.2.6.0: Extension of real numbers with positive/negative infinities
Copyright(c) Masahiro Sakai 2014
LicenseBSD-style
Maintainermasahiro.sakai@gmail.com
Safe HaskellSafe-Inferred
LanguageHaskell2010

Data.ExtendedReal

Description

Extension of real numbers with positive/negative infinities (±∞). It is useful for describing various limiting behaviors in mathematics.

Remarks:

  • ∞ - ∞ is left undefined as usual, but we define 0 × ∞ = 0 × -∞ = 0 by following the convention of probability or measure theory.

References:

Synopsis

Documentation

data Extended r Source #

Extended r is an extension of r with positive/negative infinity (±∞).

Constructors

NegInf

negative infinity (-∞)

Finite !r

finite value

PosInf

positive infinity (+∞)

Instances

Instances details
Foldable Extended Source #

Since: 0.2.6.0

Instance details

Defined in Data.ExtendedReal

Methods

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

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

foldMap' :: Monoid m => (a -> m) -> Extended a -> m #

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

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

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

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

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

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

toList :: Extended a -> [a] #

null :: Extended a -> Bool #

length :: Extended a -> Int #

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

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

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

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

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

Traversable Extended Source #

Since: 0.2.6.0

Instance details

Defined in Data.ExtendedReal

Methods

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

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

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

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

Functor Extended Source # 
Instance details

Defined in Data.ExtendedReal

Methods

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

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

Lift r => Lift (Extended r :: Type) Source #

Since: 0.2.6.0

Instance details

Defined in Data.ExtendedReal

Methods

lift :: Quote m => Extended r -> m Exp #

liftTyped :: forall (m :: Type -> Type). Quote m => Extended r -> Code m (Extended r) #

Data r => Data (Extended r) Source # 
Instance details

Defined in Data.ExtendedReal

Methods

gfoldl :: (forall d b. Data d => c (d -> b) -> d -> c b) -> (forall g. g -> c g) -> Extended r -> c (Extended r) #

gunfold :: (forall b r0. Data b => c (b -> r0) -> c r0) -> (forall r1. r1 -> c r1) -> Constr -> c (Extended r) #

toConstr :: Extended r -> Constr #

dataTypeOf :: Extended r -> DataType #

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

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

gmapT :: (forall b. Data b => b -> b) -> Extended r -> Extended r #

gmapQl :: (r0 -> r' -> r0) -> r0 -> (forall d. Data d => d -> r') -> Extended r -> r0 #

gmapQr :: forall r0 r'. (r' -> r0 -> r0) -> r0 -> (forall d. Data d => d -> r') -> Extended r -> r0 #

gmapQ :: (forall d. Data d => d -> u) -> Extended r -> [u] #

gmapQi :: Int -> (forall d. Data d => d -> u) -> Extended r -> u #

gmapM :: Monad m => (forall d. Data d => d -> m d) -> Extended r -> m (Extended r) #

gmapMp :: MonadPlus m => (forall d. Data d => d -> m d) -> Extended r -> m (Extended r) #

gmapMo :: MonadPlus m => (forall d. Data d => d -> m d) -> Extended r -> m (Extended r) #

Bounded (Extended r) Source # 
Instance details

Defined in Data.ExtendedReal

Generic (Extended r) Source # 
Instance details

Defined in Data.ExtendedReal

Associated Types

type Rep (Extended r) :: Type -> Type #

Methods

from :: Extended r -> Rep (Extended r) x #

to :: Rep (Extended r) x -> Extended r #

(Num r, Ord r) => Num (Extended r) Source #

Note that Extended r is not a field, nor a ring.

PosInf + NegInf is left undefined as usual, but we define 0 * PosInf = 0 * NegInf = 0 by following the convention of probability or measure theory.

Instance details

Defined in Data.ExtendedReal

Read r => Read (Extended r) Source # 
Instance details

Defined in Data.ExtendedReal

(Fractional r, Ord r) => Fractional (Extended r) Source #

Note that Extended r is not a field, nor a ring.

Instance details

Defined in Data.ExtendedReal

Show r => Show (Extended r) Source # 
Instance details

Defined in Data.ExtendedReal

Methods

showsPrec :: Int -> Extended r -> ShowS #

show :: Extended r -> String #

showList :: [Extended r] -> ShowS #

NFData r => NFData (Extended r) Source # 
Instance details

Defined in Data.ExtendedReal

Methods

rnf :: Extended r -> () #

Eq r => Eq (Extended r) Source # 
Instance details

Defined in Data.ExtendedReal

Methods

(==) :: Extended r -> Extended r -> Bool #

(/=) :: Extended r -> Extended r -> Bool #

Ord r => Ord (Extended r) Source # 
Instance details

Defined in Data.ExtendedReal

Methods

compare :: Extended r -> Extended r -> Ordering #

(<) :: Extended r -> Extended r -> Bool #

(<=) :: Extended r -> Extended r -> Bool #

(>) :: Extended r -> Extended r -> Bool #

(>=) :: Extended r -> Extended r -> Bool #

max :: Extended r -> Extended r -> Extended r #

min :: Extended r -> Extended r -> Extended r #

Hashable r => Hashable (Extended r) Source # 
Instance details

Defined in Data.ExtendedReal

Methods

hashWithSalt :: Int -> Extended r -> Int #

hash :: Extended r -> Int #

type Rep (Extended r) Source #

Since: 0.2.6.0

Instance details

Defined in Data.ExtendedReal

type Rep (Extended r) = D1 ('MetaData "Extended" "Data.ExtendedReal" "extended-reals-0.2.6.0-Dg3SlKF58uu9KRRfiGdf5p" 'False) (C1 ('MetaCons "NegInf" 'PrefixI 'False) (U1 :: Type -> Type) :+: (C1 ('MetaCons "Finite" 'PrefixI 'False) (S1 ('MetaSel ('Nothing :: Maybe Symbol) 'NoSourceUnpackedness 'SourceStrict 'DecidedStrict) (Rec0 r)) :+: C1 ('MetaCons "PosInf" 'PrefixI 'False) (U1 :: Type -> Type)))

inf :: Extended r Source #

Infinity (∞)

isFinite :: Extended r -> Bool Source #

isFinite x = not (isInfinite x).

isInfinite :: Extended r -> Bool Source #

isInfinite x returns True iff x is PosInf or NegInf.

fromRealFloat :: RealFloat r => r -> Extended r Source #

Helper to convert Double and Float to Extended, taking care of infinite values automatically.

>>> fromRealFloat (1 / 0)
PosInf
>>> fromRealFloat (-1 / 0)
NegInf
>>> fromRealFloat (0 / 0)
*** Exception: fromRealFloat: argument should not be NaN

Since: 0.2.5.0