Portability | GHC only |
---|---|

Stability | experimental |

Maintainer | ekmett@gmail.com |

Interval arithmetic

- data Interval a = I !a !a
- (...) :: a -> a -> Interval a
- whole :: Fractional a => Interval a
- empty :: Fractional a => Interval a
- null :: Ord a => Interval a -> Bool
- singleton :: a -> Interval a
- elem :: Ord a => a -> Interval a -> Bool
- notElem :: Ord a => a -> Interval a -> Bool
- inf :: Interval a -> a
- sup :: Interval a -> a
- singular :: Ord a => Interval a -> Bool
- width :: Num a => Interval a -> a
- intersection :: (Fractional a, Ord a) => Interval a -> Interval a -> Interval a
- hull :: Ord a => Interval a -> Interval a -> Interval a
- bisection :: Fractional a => Interval a -> (Interval a, Interval a)
- magnitude :: (Num a, Ord a) => Interval a -> a
- mignitude :: (Num a, Ord a) => Interval a -> a
- contains :: Ord a => Interval a -> Interval a -> Bool
- isSubsetOf :: Ord a => Interval a -> Interval a -> Bool
- certainly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool
- (<!) :: Ord a => Interval a -> Interval a -> Bool
- (<=!) :: Ord a => Interval a -> Interval a -> Bool
- (==!) :: Eq a => Interval a -> Interval a -> Bool
- (>=!) :: Ord a => Interval a -> Interval a -> Bool
- (>!) :: Ord a => Interval a -> Interval a -> Bool
- possibly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool
- (<?) :: Ord a => Interval a -> Interval a -> Bool
- (<=?) :: Ord a => Interval a -> Interval a -> Bool
- (==?) :: Ord a => Interval a -> Interval a -> Bool
- (>=?) :: Ord a => Interval a -> Interval a -> Bool
- (>?) :: Ord a => Interval a -> Interval a -> Bool
- idouble :: Interval Double -> Interval Double
- ifloat :: Interval Float -> Interval Float

# Documentation

I !a !a |

Eq a => Eq (Interval a) | |

(RealExtras a, Ord a) => Floating (Interval a) | |

(Fractional a, Ord a) => Fractional (Interval a) | |

(Num a, Ord a) => Num (Interval a) | |

Ord a => Ord (Interval a) | |

Real a => Real (Interval a) | This means that realToFrac will use the midpoint What moron put an Ord instance requirement on Real! |

RealExtras a => RealFloat (Interval a) | We have to play some semantic games to make these methods make sense. Most compute with the midpoint of the interval. |

RealFloat a => RealFrac (Interval a) | |

Show a => Show (Interval a) | |

RealExtras a => RealExtras (Interval a) |

(...) :: a -> a -> Interval aSource

The rule of thumb is you should only use this to construct using values that you took out of the interval. Otherwise, use I, to force rounding

whole :: Fractional a => Interval aSource

The whole real number line

empty :: Fractional a => Interval aSource

An empty interval

singular :: Ord a => Interval a -> BoolSource

Is the interval a singleton point? N.B. This is fairly fragile and likely will not hold after even a few operations that only involve singletons

intersection :: (Fractional a, Ord a) => Interval a -> Interval a -> Interval aSource

Calculate the intersection of two intervals.

hull :: Ord a => Interval a -> Interval a -> Interval aSource

Calculate the convex hull of two intervals

bisection :: Fractional a => Interval a -> (Interval a, Interval a)Source

Bisect an interval at its midpoint.

certainly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> BoolSource

For all `x`

in `X`

, `y`

in `Y`

. `x `

`op`

y

possibly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> BoolSource

Does there exist an `x`

in `X`

, `y`

in `Y`

such that `x `

?
`op`

y

(<?) :: Ord a => Interval a -> Interval a -> BoolSource

Does there exist an `x`

in `X`

, `y`

in `Y`

such that `x `

?
`<`

y

(<=?) :: Ord a => Interval a -> Interval a -> BoolSource

Does there exist an `x`

in `X`

, `y`

in `Y`

such that `x `

?
`<=`

y

(==?) :: Ord a => Interval a -> Interval a -> BoolSource

Does there exist an `x`

in `X`

, `y`

in `Y`

such that `x `

?
`==`

y

(>=?) :: Ord a => Interval a -> Interval a -> BoolSource

Does there exist an `x`

in `X`

, `y`

in `Y`

such that `x `

?
`>=`

y