sign-0.4.4: Arithmetic over signs and sets of signs

Copyright(c) Masahiro Sakai 2013
LicenseBSD-style
Maintainermasahiro.sakai@gmail.com
Stabilityprovisional
Portabilitynon-portable (FlexibleInstances, DeriveDataTypeable, CPP)
Safe HaskellSafe
LanguageHaskell2010

Data.Sign

Contents

Description

This module provides arithmetic over signs (i.e. {-, 0, +}) and set of signs.

For the purpose of abstract interpretation, it might be convenient to use Lattice instance. See also lattices package (http://hackage.haskell.org/package/lattices).

Synopsis

The Sign data type

data Sign Source #

Signs of real numbers.

Constructors

Neg

negative

Zero

zero

Pos

positive

Instances
Bounded Sign Source # 
Instance details

Defined in Data.Sign

Enum Sign Source # 
Instance details

Defined in Data.Sign

Methods

succ :: Sign -> Sign #

pred :: Sign -> Sign #

toEnum :: Int -> Sign #

fromEnum :: Sign -> Int #

enumFrom :: Sign -> [Sign] #

enumFromThen :: Sign -> Sign -> [Sign] #

enumFromTo :: Sign -> Sign -> [Sign] #

enumFromThenTo :: Sign -> Sign -> Sign -> [Sign] #

Eq Sign Source # 
Instance details

Defined in Data.Sign

Methods

(==) :: Sign -> Sign -> Bool #

(/=) :: Sign -> Sign -> Bool #

Data Sign Source # 
Instance details

Defined in Data.Sign

Methods

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

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

toConstr :: Sign -> Constr #

dataTypeOf :: Sign -> DataType #

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

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

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

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

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

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

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

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

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

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

Ord Sign Source # 
Instance details

Defined in Data.Sign

Methods

compare :: Sign -> Sign -> Ordering #

(<) :: Sign -> Sign -> Bool #

(<=) :: Sign -> Sign -> Bool #

(>) :: Sign -> Sign -> Bool #

(>=) :: Sign -> Sign -> Bool #

max :: Sign -> Sign -> Sign #

min :: Sign -> Sign -> Sign #

Read Sign Source # 
Instance details

Defined in Data.Sign

Show Sign Source # 
Instance details

Defined in Data.Sign

Methods

showsPrec :: Int -> Sign -> ShowS #

show :: Sign -> String #

showList :: [Sign] -> ShowS #

NFData Sign Source # 
Instance details

Defined in Data.Sign

Methods

rnf :: Sign -> () #

Hashable Sign Source # 
Instance details

Defined in Data.Sign

Methods

hashWithSalt :: Int -> Sign -> Int #

hash :: Sign -> Int #

Universe Sign Source # 
Instance details

Defined in Data.Sign

Methods

universe :: [Sign] #

Finite Sign Source # 
Instance details

Defined in Data.Sign

Fractional (Set Sign) Source # 
Instance details

Defined in Data.Sign

Num (Set Sign) Source # 
Instance details

Defined in Data.Sign

Operations over signs

negate :: Sign -> Sign Source #

Unary negation.

abs :: Sign -> Sign Source #

Absolute value.

mult :: Sign -> Sign -> Sign Source #

Multiplication.

recip :: Sign -> Sign Source #

Reciprocal fraction.

div :: Sign -> Sign -> Sign Source #

Fractional division.

pow :: Integral x => Sign -> x -> Sign Source #

Exponentiation s^x.

Note that we define pow Zero 0 = Pos assuming 0^0 = 1.

signOf :: Real a => a -> Sign Source #

Sign of a number.

symbol :: Sign -> String Source #

Mnemonic symbol of a number.

This function returns "-", "0", "+" respectively for Neg, Zero, Pos.

Operations over sets of signs

Set Sign is equipped with instances of Num and Fractional. Therefore arithmetic operations can be applied to Set Sign.

Instances of Lattice and BoundedLattice are also provided for the purpose of abstract interpretation.