yap-0.3.0: yet another prelude - a simplistic refactoring with algebraic classes
Copyright(c) The University of Glasgow 2001
LicenseBSD-style (see the file LICENSE)
Maintainerlibraries@haskell.org
Stabilitystable
Portabilityportable
Safe HaskellNone
LanguageHaskell2010

Data.YAP.Ratio

Description

Standard functions on rational numbers.

This is a replacement for Data.Ratio, using the same Ratio type, but with components generalized from Integral to StandardAssociate + Euclidean.

Using the same type means we have the old instances. The Ord and Read instances could be relaxed to:

instance (Ord a, Semiring a) => Ord (Ratio a)
instance (Eq a, StandardAssociate a, Euclidean a, Read a) => Read (Ratio a)
Synopsis

Documentation

data Ratio a #

Rational numbers, with numerator and denominator of some Integral type.

Note that Ratio's instances inherit the deficiencies from the type parameter's. For example, Ratio Natural's Num instance has similar problems to Natural's.

Instances

Instances details
(Data a, Integral a) => Data (Ratio a)

Since: base-4.0.0.0

Instance details

Defined in Data.Data

Methods

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

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

toConstr :: Ratio a -> Constr #

dataTypeOf :: Ratio a -> DataType #

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

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

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

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

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

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

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

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

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

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

(Storable a, Integral a) => Storable (Ratio a)

Since: base-4.8.0.0

Instance details

Defined in Foreign.Storable

Methods

sizeOf :: Ratio a -> Int #

alignment :: Ratio a -> Int #

peekElemOff :: Ptr (Ratio a) -> Int -> IO (Ratio a) #

pokeElemOff :: Ptr (Ratio a) -> Int -> Ratio a -> IO () #

peekByteOff :: Ptr b -> Int -> IO (Ratio a) #

pokeByteOff :: Ptr b -> Int -> Ratio a -> IO () #

peek :: Ptr (Ratio a) -> IO (Ratio a) #

poke :: Ptr (Ratio a) -> Ratio a -> IO () #

Integral a => Enum (Ratio a)

Since: base-2.0.1

Instance details

Defined in GHC.Real

Methods

succ :: Ratio a -> Ratio a #

pred :: Ratio a -> Ratio a #

toEnum :: Int -> Ratio a #

fromEnum :: Ratio a -> Int #

enumFrom :: Ratio a -> [Ratio a] #

enumFromThen :: Ratio a -> Ratio a -> [Ratio a] #

enumFromTo :: Ratio a -> Ratio a -> [Ratio a] #

enumFromThenTo :: Ratio a -> Ratio a -> Ratio a -> [Ratio a] #

Integral a => Num (Ratio a)

Since: base-2.0.1

Instance details

Defined in GHC.Real

Methods

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

(-) :: Ratio a -> Ratio a -> Ratio a #

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

negate :: Ratio a -> Ratio a #

abs :: Ratio a -> Ratio a #

signum :: Ratio a -> Ratio a #

fromInteger :: Integer -> Ratio a #

(Integral a, Read a) => Read (Ratio a)

Since: base-2.1

Instance details

Defined in GHC.Read

Integral a => Fractional (Ratio a)

Since: base-2.0.1

Instance details

Defined in GHC.Real

Methods

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

recip :: Ratio a -> Ratio a #

fromRational :: Rational -> Ratio a #

Integral a => Real (Ratio a)

Since: base-2.0.1

Instance details

Defined in GHC.Real

Methods

toRational :: Ratio a -> Rational #

Integral a => RealFrac (Ratio a)

Since: base-2.0.1

Instance details

Defined in GHC.Real

Methods

properFraction :: Integral b => Ratio a -> (b, Ratio a) #

truncate :: Integral b => Ratio a -> b #

round :: Integral b => Ratio a -> b #

ceiling :: Integral b => Ratio a -> b #

floor :: Integral b => Ratio a -> b #

Show a => Show (Ratio a)

Since: base-2.0.1

Instance details

Defined in GHC.Real

Methods

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

show :: Ratio a -> String #

showList :: [Ratio a] -> ShowS #

Eq a => Eq (Ratio a)

Since: base-2.1

Instance details

Defined in GHC.Real

Methods

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

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

Integral a => Ord (Ratio a)

Since: base-2.0.1

Instance details

Defined in GHC.Real

Methods

compare :: Ratio a -> Ratio a -> Ordering #

(<) :: Ratio a -> Ratio a -> Bool #

(<=) :: Ratio a -> Ratio a -> Bool #

(>) :: Ratio a -> Ratio a -> Bool #

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

max :: Ratio a -> Ratio a -> Ratio a #

min :: Ratio a -> Ratio a -> Ratio a #

(Eq a, StandardAssociate a, Euclidean a, Ring a) => AbelianGroup (Ratio a) Source # 
Instance details

Defined in Data.YAP.Algebra.Internal

Methods

(-) :: Ratio a -> Ratio a -> Ratio a Source #

negate :: Ratio a -> Ratio a Source #

gtimes :: (AbelianGroup b, ToInteger b) => b -> Ratio a -> Ratio a Source #

(Eq a, StandardAssociate a, Euclidean a) => AdditiveMonoid (Ratio a) Source # 
Instance details

Defined in Data.YAP.Algebra.Internal

Methods

(+) :: Ratio a -> Ratio a -> Ratio a Source #

zero :: Ratio a Source #

atimes :: ToInteger b => b -> Ratio a -> Ratio a Source #

(Eq a, StandardAssociate a, Euclidean a, Ring a) => DivisionRing (Ratio a) Source # 
Instance details

Defined in Data.YAP.Algebra.Internal

(Eq a, StandardAssociate a, Euclidean a) => DivisionSemiring (Ratio a) Source # 
Instance details

Defined in Data.YAP.Algebra.Internal

Methods

recip :: Ratio a -> Ratio a Source #

(Eq a, StandardAssociate a, Euclidean a, Ring a) => Field (Ratio a) Source # 
Instance details

Defined in Data.YAP.Algebra.Internal

Integral a => Fractional (Ratio a) Source #

As in Data.Ratio.

Instance details

Defined in Data.YAP.Algebra.Internal

Integral a => FromRational (Ratio a) Source # 
Instance details

Defined in Data.YAP.Algebra.Internal

Integral a => Num (Ratio a) Source #

As in Data.Ratio.

Instance details

Defined in Data.YAP.Algebra.Internal

Methods

abs :: Ratio a -> Ratio a Source #

signum :: Ratio a -> Ratio a Source #

(Integral a, Integral a) => Real (Ratio a) Source #

As in Data.Ratio. The original version of Integral is required here by the old instance Ord (Ratio a). Ideally there would be only one.

Instance details

Defined in Data.YAP.Algebra.Internal

(Integral a, Integral a) => RealFrac (Ratio a) Source #

As in Data.Ratio. The original version of Integral is required here by the old instance Ord (Ratio a). Ideally there would be only one.

Instance details

Defined in Data.YAP.Algebra.Internal

Methods

properFraction :: Integral b => Ratio a -> (b, Ratio a) Source #

truncate :: Integral b => Ratio a -> b Source #

round :: Integral b => Ratio a -> b Source #

ceiling :: Integral b => Ratio a -> b Source #

floor :: Integral b => Ratio a -> b Source #

(Eq a, StandardAssociate a, Euclidean a, Ring a) => Ring (Ratio a) Source # 
Instance details

Defined in Data.YAP.Algebra.Internal

(Eq a, StandardAssociate a, Euclidean a) => Semifield (Ratio a) Source # 
Instance details

Defined in Data.YAP.Algebra.Internal

Methods

(/) :: Ratio a -> Ratio a -> Ratio a Source #

(Eq a, StandardAssociate a, Euclidean a) => Semiring (Ratio a) Source # 
Instance details

Defined in Data.YAP.Algebra.Internal

Methods

(*) :: Ratio a -> Ratio a -> Ratio a Source #

one :: Ratio a Source #

fromNatural :: Natural -> Ratio a Source #

rescale :: Ratio a -> Ratio a -> (Ratio a, Ratio a, Ratio a -> Ratio a) Source #

(ToInteger a, Integral a) => ToRational (Ratio a) Source #

The original version of Integral is required here by the old instance Ord (Ratio a). Ideally this would be replaced with Ord a.

Instance details

Defined in Data.YAP.Algebra.Internal

type Rational = Ratio Integer #

Arbitrary-precision rational numbers, represented as a ratio of two Integer values. A rational number may be constructed using the % operator.

(%) :: (Eq a, StandardAssociate a, Euclidean a) => a -> a -> Ratio a infixl 7 Source #

Forms the ratio of two values in a Euclidean domain (e.g. Integer).

numerator :: Ratio a -> a Source #

Extract the numerator of the ratio in reduced form: the numerator and denominator have no common factor and the denominator is positive.

denominator :: Ratio a -> a Source #

Extract the denominator of the ratio in reduced form: the numerator and denominator have no common factor and the denominator is positive.

approxRational :: ToRational a => a -> a -> Rational Source #

approxRational, applied to two real fractional numbers x and epsilon, returns the simplest rational number within epsilon of x. A rational number y is said to be simpler than another y' if

Any real interval contains a unique simplest rational; in particular, note that 0/1 is the simplest rational of all.