| Copyright | (c) Michael Szvetits 2019 |
|---|---|
| License | BSD3 (see the file LICENSE) |
| Maintainer | typedbyte@qualified.name |
| Stability | stable |
| Portability | portable |
| Safe Haskell | Safe |
| Language | Haskell2010 |
Numeric.Interval
Contents
Description
This module exports the types and functions needed to construct, combine and process non-empty numeric intervals.
Package users might want to use the module Numeric.Domain instead, since it provides a convenient abstraction for empty and multiple intervals.
Synopsis
- data Interval a
- lowerBound :: Interval a -> LowerBound a
- upperBound :: Interval a -> UpperBound a
- singleton :: a -> Interval a
- interval :: Ord a => LowerBound a -> UpperBound a -> Maybe (Interval a)
- lowerBounded :: LowerBound a -> Interval a
- upperBounded :: UpperBound a -> Interval a
- maxInterval :: Interval a
- difference :: Dist a => Interval a -> Interval a -> [Interval a]
- intersect :: Ord a => Interval a -> Interval a -> Maybe (Interval a)
- merge :: Dist a => Interval a -> Interval a -> Maybe (Interval a)
- member :: Ord a => a -> Interval a -> Bool
- isSingleton :: Eq a => Interval a -> Bool
- isInfinite :: Interval a -> Bool
- hasNegatives :: (Num a, Ord a) => Interval a -> Bool
- hasPositives :: (Num a, Ord a) => Interval a -> Bool
- contains :: Ord a => Interval a -> Interval a -> Bool
- elems :: Enum a => Interval a -> Maybe [a]
- minValue :: Interval a -> Maybe a
- maxValue :: Interval a -> Maybe a
- plus :: Num a => Interval a -> Interval a -> Interval a
- minus :: Num a => Interval a -> Interval a -> Interval a
- times :: (Num a, Ord a) => Interval a -> Interval a -> Interval a
- div :: Integral a => Interval a -> Interval a -> Interval a
- abs :: (Num a, Ord a) => Interval a -> Interval a
- negate :: Num a => Interval a -> Interval a
- pretty :: Show a => Interval a -> String
Core Types
A numeric interval is a non-empty, possibly infinite range of values.
Note that rounding errors due to floating point arithmetic are not handled at the lower and upper bounds of intervals.
lowerBound :: Interval a -> LowerBound a Source #
Returns the lower bound of an interval.
upperBound :: Interval a -> UpperBound a Source #
Returns the upper bound of an interval.
Interval Construction
interval :: Ord a => LowerBound a -> UpperBound a -> Maybe (Interval a) Source #
Creates an interval with the given lower and upper bounds.
Returns Nothing if the lower bound is greater than the upper bound.
lowerBounded :: LowerBound a -> Interval a Source #
Creates an interval with the given lower bound and a positive infinite upper bound.
upperBounded :: UpperBound a -> Interval a Source #
Creates an interval with the given upper bound and a negative infinite lower bound.
maxInterval :: Interval a Source #
Creates an interval with values ranging from negative infinity to positive infinity.
Interval Combination
difference :: Dist a => Interval a -> Interval a -> [Interval a] Source #
Calculates the difference between two intervals, i.e. difference whole
diff returns the intervals which contain all elements of whole that are
not in diff.
Returns the empty list if diff contains whole.
Returns a singleton list if whole and diff overlap on one of their
bounds.
Returns a list with two intervals if whole contains diff.
intersect :: Ord a => Interval a -> Interval a -> Maybe (Interval a) Source #
Calculates the intersection of two intervals, i.e. intersect ix iy
contains all elements that are in both intervals ix and iy.
Returns Nothing if the intervals do not overlap.
merge :: Dist a => Interval a -> Interval a -> Maybe (Interval a) Source #
Merges two intervals into one if they overlap or if they have adjacent bounds.
Note that adjacency depends on the type of the interval values, e.g. the
intervals [1,3] and [4,6] can be merged to [1,6] for Interval Int,
but not for Interval Double.
Returns Nothing if the intervals do not overlap or if their bounds are not
adjacent.
Interval Predicates
isSingleton :: Eq a => Interval a -> Bool Source #
Checks if an interval contains exactly one element.
isInfinite :: Interval a -> Bool Source #
Checks if an interval has a lower bound of negative infinity or an upper bound of positive infinity.
hasNegatives :: (Num a, Ord a) => Interval a -> Bool Source #
Checks if an interval contains negative values.
hasPositives :: (Num a, Ord a) => Interval a -> Bool Source #
Checks if an interval contains positive values.
contains :: Ord a => Interval a -> Interval a -> Bool Source #
contains whole sub checks if the interval sub is contained in the
interval whole.
Returns True if the two intervals are the same.
Interval Values
elems :: Enum a => Interval a -> Maybe [a] Source #
Enumerates all elements of an interval in ascending order according to the
Enum implementation of the interval value type.
Returns Nothing if any of the two interval bounds is unbounded (see
isInfinite).
minValue :: Interval a -> Maybe a Source #
Returns the smallest value of an interval.
Only succeeds if the lower bound is closed.
maxValue :: Interval a -> Maybe a Source #
Returns the greatest value of an interval.
Only succeeds if the upper bound is closed.
Interval Arithmetic
plus :: Num a => Interval a -> Interval a -> Interval a Source #
Adds the value ranges of two intervals.
minus :: Num a => Interval a -> Interval a -> Interval a Source #
Subtracts the value ranges of two intervals.
times :: (Num a, Ord a) => Interval a -> Interval a -> Interval a Source #
Multiplies the value ranges of two intervals.
div :: Integral a => Interval a -> Interval a -> Interval a Source #
Divides the value ranges of two intervals using integer division.
Returns maxInterval if 0 is a member of the divisor interval.
abs :: (Num a, Ord a) => Interval a -> Interval a Source #
Calculates the abs function of an interval and their corresponding values.