-- Hoogle documentation, generated by Haddock -- See Hoogle, http://www.haskell.org/hoogle/ -- | Interval Arithmetic -- @package intervals @version 0.7.1 module Numeric.Interval.Exception data EmptyInterval EmptyInterval :: EmptyInterval data AmbiguousComparison AmbiguousComparison :: AmbiguousComparison instance Typeable EmptyInterval instance Typeable AmbiguousComparison instance Eq EmptyInterval instance Ord EmptyInterval instance Data EmptyInterval instance Eq AmbiguousComparison instance Ord AmbiguousComparison instance Data AmbiguousComparison instance Exception AmbiguousComparison instance Show AmbiguousComparison instance Exception EmptyInterval instance Show EmptyInterval -- | Directed Interval arithmetic module Numeric.Interval.Kaucher data Interval a I :: !a -> !a -> Interval a -- | Create a directed interval. (...) :: a -> a -> Interval a -- | Try to create a non-empty interval. interval :: Ord a => a -> a -> Maybe (Interval a) -- | The whole real number line -- --
-- >>> whole -- -Infinity ... Infinity --whole :: Fractional a => Interval a -- | An empty interval -- --
-- >>> empty -- NaN ... NaN --empty :: Fractional a => Interval a -- | negation handles NaN properly -- --
-- >>> null (1 ... 5) -- False ---- --
-- >>> null (1 ... 1) -- False ---- --
-- >>> null empty -- True --null :: Ord a => Interval a -> Bool -- | A singleton point -- --
-- >>> singleton 1 -- 1 ... 1 --singleton :: a -> Interval a -- | Determine if a point is in the interval. -- --
-- >>> elem 3.2 (1.0 ... 5.0) -- True ---- --
-- >>> elem 5 (1.0 ... 5.0) -- True ---- --
-- >>> elem 1 (1.0 ... 5.0) -- True ---- --
-- >>> elem 8 (1.0 ... 5.0) -- False ---- --
-- >>> elem 5 empty -- False --elem :: Ord a => a -> Interval a -> Bool -- | Determine if a point is not included in the interval -- --
-- >>> notElem 8 (1.0 ... 5.0) -- True ---- --
-- >>> notElem 1.4 (1.0 ... 5.0) -- False ---- -- And of course, nothing is a member of the empty interval. -- --
-- >>> notElem 5 empty -- True --notElem :: Ord a => a -> Interval a -> Bool -- | The infinumum (lower bound) of an interval -- --
-- >>> inf (1 ... 20) -- 1 --inf :: Interval a -> a -- | The supremum (upper bound) of an interval -- --
-- >>> sup (1 ... 20) -- 20 --sup :: Interval a -> a -- | 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 -- --
-- >>> singular (singleton 1) -- True ---- --
-- >>> singular (1.0 ... 20.0) -- False --singular :: Ord a => Interval a -> Bool -- | Calculate the width of an interval. -- --
-- >>> width (1 ... 20) -- 19 ---- --
-- >>> width (singleton 1) -- 0 ---- --
-- >>> width empty -- NaN --width :: Num a => Interval a -> a -- | Nearest point to the midpoint of the interval. -- --
-- >>> midpoint (10.0 ... 20.0) -- 15.0 ---- --
-- >>> midpoint (singleton 5.0) -- 5.0 ---- --
-- >>> midpoint empty -- NaN --midpoint :: Fractional a => Interval a -> a -- | Calculate the intersection of two intervals. -- --
-- >>> intersection (1 ... 10 :: Interval Double) (5 ... 15 :: Interval Double) -- 5.0 ... 10.0 --intersection :: (Fractional a, Ord a) => Interval a -> Interval a -> Interval a -- | Calculate the convex hull of two intervals -- --
-- >>> hull (0 ... 10 :: Interval Double) (5 ... 15 :: Interval Double) -- 0.0 ... 15.0 ---- --
-- >>> hull (15 ... 85 :: Interval Double) (0 ... 10 :: Interval Double) -- 0.0 ... 85.0 --hull :: Ord a => Interval a -> Interval a -> Interval a -- | Bisect an interval at its midpoint. -- --
-- >>> bisect (10.0 ... 20.0) -- (10.0 ... 15.0,15.0 ... 20.0) ---- --
-- >>> bisect (singleton 5.0) -- (5.0 ... 5.0,5.0 ... 5.0) ---- --
-- >>> bisect empty -- (NaN ... NaN,NaN ... NaN) --bisect :: Fractional a => Interval a -> (Interval a, Interval a) -- | Magnitude -- --
-- >>> magnitude (1 ... 20) -- 20 ---- --
-- >>> magnitude (-20 ... 10) -- 20 ---- --
-- >>> magnitude (singleton 5) -- 5 --magnitude :: (Num a, Ord a) => Interval a -> a -- | "mignitude" -- --
-- >>> mignitude (1 ... 20) -- 1 ---- --
-- >>> mignitude (-20 ... 10) -- 0 ---- --
-- >>> mignitude (singleton 5) -- 5 ---- --
-- >>> mignitude empty -- NaN --mignitude :: (Num a, Ord a) => Interval a -> a -- | Hausdorff distance between non-empty intervals. -- --
-- >>> distance (1 ... 7) (6 ... 10) -- 0 ---- --
-- >>> distance (1 ... 7) (15 ... 24) -- 8 ---- --
-- >>> distance (1 ... 7) (-10 ... -2) -- 3 ---- --
-- >>> distance empty (1 ... 1) -- NaN --distance :: (Num a, Ord a) => Interval a -> Interval a -> a -- | Inflate an interval by enlarging it at both ends. -- --
-- >>> inflate 3 (-1 ... 7) -- -4 ... 10 ---- --
-- >>> inflate (-2) (0 ... 4) -- 2 ... 2 --inflate :: (Num a, Ord a) => a -> Interval a -> Interval a -- | Deflate an interval by shrinking it from both ends. -- --
-- >>> deflate 3.0 (-4.0 ... 10.0) -- -1.0 ... 7.0 ---- --
-- >>> deflate 2.0 (-1.0 ... 1.0) -- 1.0 ... -1.0 --deflate :: (Fractional a, Ord a) => a -> Interval a -> Interval a -- | Scale an interval about its midpoint. -- --
-- >>> scale 1.1 (-6.0 ... 4.0) -- -6.5 ... 4.5 ---- --
-- >>> scale (-2.0) (-1.0 ... 1.0) -- 2.0 ... -2.0 --scale :: (Fractional a, Ord a) => a -> Interval a -> Interval a -- | Construct a symmetric interval. -- --
-- >>> symmetric 3 -- -3 ... 3 ---- --
-- >>> symmetric (-2) -- 2 ... -2 --symmetric :: (Num a, Ord a) => a -> Interval a -- | Check if interval X totally contains interval Y -- --
-- >>> (20 ... 40 :: Interval Double) `contains` (25 ... 35 :: Interval Double) -- True ---- --
-- >>> (20 ... 40 :: Interval Double) `contains` (15 ... 35 :: Interval Double) -- False --contains :: Ord a => Interval a -> Interval a -> Bool -- | Flipped version of contains. Check if interval X a -- subset of interval Y -- --
-- >>> (25 ... 35 :: Interval Double) `isSubsetOf` (20 ... 40 :: Interval Double) -- True ---- --
-- >>> (20 ... 40 :: Interval Double) `isSubsetOf` (15 ... 35 :: Interval Double) -- False --isSubsetOf :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- op y certainly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- < y -- --
-- >>> (5 ... 10 :: Interval Double) <! (20 ... 30 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) <! (10 ... 30 :: Interval Double) -- False ---- --
-- >>> (20 ... 30 :: Interval Double) <! (5 ... 10 :: Interval Double) -- False --( Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- <= y -- --
-- >>> (5 ... 10 :: Interval Double) <=! (20 ... 30 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) <=! (10 ... 30 :: Interval Double) -- True ---- --
-- >>> (20 ... 30 :: Interval Double) <=! (5 ... 10 :: Interval Double) -- False --(<=!) :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- == y -- -- Only singleton intervals return true -- --
-- >>> (singleton 5 :: Interval Double) ==! (singleton 5 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) ==! (5 ... 10 :: Interval Double) -- False --(==!) :: Eq a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- >= y -- --
-- >>> (20 ... 40 :: Interval Double) >=! (10 ... 20 :: Interval Double) -- True ---- --
-- >>> (5 ... 20 :: Interval Double) >=! (15 ... 40 :: Interval Double) -- False --(>=!) :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- > y -- --
-- >>> (20 ... 40 :: Interval Double) >! (10 ... 19 :: Interval Double) -- True ---- --
-- >>> (5 ... 20 :: Interval Double) >! (15 ... 40 :: Interval Double) -- False --(>!) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x op y? possibly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x < y? () :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x <= y? (<=?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x == y? (==?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x >= y? (>=?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x > y? (>?) :: Ord a => Interval a -> Interval a -> Bool -- | The nearest value to that supplied which is contained in the interval. clamp :: Ord a => Interval a -> a -> a -- | id function. Useful for type specification -- --
-- >>> :t idouble (1 ... 3) -- idouble (1 ... 3) :: Interval Double --idouble :: Interval Double -> Interval Double -- | id function. Useful for type specification -- --
-- >>> :t ifloat (1 ... 3) -- ifloat (1 ... 3) :: Interval Float --ifloat :: Interval Float -> Interval Float instance Typeable Interval instance Data a => Data (Interval a) instance Generic (Interval a) instance Generic1 Interval instance Datatype D1Interval instance Constructor C1_0Interval instance RealFloat a => RealFloat (Interval a) instance (RealFloat a, Ord a) => Floating (Interval a) instance RealFrac a => RealFrac (Interval a) instance (Fractional a, Ord a) => Fractional (Interval a) instance Ord a => Ord (Interval a) instance Real a => Real (Interval a) instance (Num a, Ord a) => Num (Interval a) instance Show a => Show (Interval a) instance Eq a => Eq (Interval a) instance Distributive Interval instance Monad Interval instance Applicative Interval instance Traversable Interval instance Foldable Interval instance Functor Interval -- | Interval arithmetic module Numeric.Interval.NonEmpty.Internal data Interval a I :: !a -> !a -> Interval a -- | Create a non-empty interval, turning it around if necessary (...) :: Ord a => a -> a -> Interval a -- | Try to create a non-empty interval. interval :: Ord a => a -> a -> Maybe (Interval a) -- | The whole real number line -- --
-- >>> whole -- -Infinity ... Infinity --whole :: Fractional a => Interval a -- | A singleton point -- --
-- >>> singleton 1 -- 1 ... 1 --singleton :: a -> Interval a -- | Determine if a point is in the interval. -- --
-- >>> elem 3.2 (1.0 ... 5.0) -- True ---- --
-- >>> elem 5 (1.0 ... 5.0) -- True ---- --
-- >>> elem 1 (1.0 ... 5.0) -- True ---- --
-- >>> elem 8 (1.0 ... 5.0) -- False --elem :: Ord a => a -> Interval a -> Bool -- | Determine if a point is not included in the interval -- --
-- >>> notElem 8 (1.0 ... 5.0) -- True ---- --
-- >>> notElem 1.4 (1.0 ... 5.0) -- False --notElem :: Ord a => a -> Interval a -> Bool -- | The infinumum (lower bound) of an interval -- --
-- >>> inf (1 ... 20) -- 1 --inf :: Interval a -> a -- | The supremum (upper bound) of an interval -- --
-- >>> sup (1 ... 20) -- 20 --sup :: Interval a -> a -- | 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 -- --
-- >>> singular (singleton 1) -- True ---- --
-- >>> singular (1.0 ... 20.0) -- False --singular :: Ord a => Interval a -> Bool -- | Calculate the width of an interval. -- --
-- >>> width (1 ... 20) -- 19 ---- --
-- >>> width (singleton 1) -- 0 --width :: Num a => Interval a -> a -- | Nearest point to the midpoint of the interval. -- --
-- >>> midpoint (10.0 ... 20.0) -- 15.0 ---- --
-- >>> midpoint (singleton 5.0) -- 5.0 --midpoint :: Fractional a => Interval a -> a -- | Hausdorff distance between intervals. -- --
-- >>> distance (1 ... 7) (6 ... 10) -- 0 ---- --
-- >>> distance (1 ... 7) (15 ... 24) -- 8 ---- --
-- >>> distance (1 ... 7) (-10 ... -2) -- 3 --distance :: (Num a, Ord a) => Interval a -> Interval a -> a -- | Calculate the intersection of two intervals. -- --
-- >>> intersection (1 ... 10 :: Interval Double) (5 ... 15 :: Interval Double) -- Just (5.0 ... 10.0) --intersection :: Ord a => Interval a -> Interval a -> Maybe (Interval a) -- | Calculate the convex hull of two intervals -- --
-- >>> hull (0 ... 10 :: Interval Double) (5 ... 15 :: Interval Double) -- 0.0 ... 15.0 ---- --
-- >>> hull (15 ... 85 :: Interval Double) (0 ... 10 :: Interval Double) -- 0.0 ... 85.0 --hull :: Ord a => Interval a -> Interval a -> Interval a -- | Bisect an interval at its midpoint. -- --
-- >>> bisect (10.0 ... 20.0) -- (10.0 ... 15.0,15.0 ... 20.0) ---- --
-- >>> bisect (singleton 5.0) -- (5.0 ... 5.0,5.0 ... 5.0) --bisect :: Fractional a => Interval a -> (Interval a, Interval a) bisectIntegral :: Integral a => Interval a -> (Interval a, Interval a) -- | Magnitude -- --
-- >>> magnitude (1 ... 20) -- 20 ---- --
-- >>> magnitude (-20 ... 10) -- 20 ---- --
-- >>> magnitude (singleton 5) -- 5 --magnitude :: (Num a, Ord a) => Interval a -> a -- | "mignitude" -- --
-- >>> mignitude (1 ... 20) -- 1 ---- --
-- >>> mignitude (-20 ... 10) -- 0 ---- --
-- >>> mignitude (singleton 5) -- 5 --mignitude :: (Num a, Ord a) => Interval a -> a -- | Check if interval X totally contains interval Y -- --
-- >>> (20 ... 40 :: Interval Double) `contains` (25 ... 35 :: Interval Double) -- True ---- --
-- >>> (20 ... 40 :: Interval Double) `contains` (15 ... 35 :: Interval Double) -- False --contains :: Ord a => Interval a -> Interval a -> Bool -- | Flipped version of contains. Check if interval X a -- subset of interval Y -- --
-- >>> (25 ... 35 :: Interval Double) `isSubsetOf` (20 ... 40 :: Interval Double) -- True ---- --
-- >>> (20 ... 40 :: Interval Double) `isSubsetOf` (15 ... 35 :: Interval Double) -- False --isSubsetOf :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- op y certainly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- < y -- --
-- >>> (5 ... 10 :: Interval Double) <! (20 ... 30 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) <! (10 ... 30 :: Interval Double) -- False ---- --
-- >>> (20 ... 30 :: Interval Double) <! (5 ... 10 :: Interval Double) -- False --( Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- <= y -- --
-- >>> (5 ... 10 :: Interval Double) <=! (20 ... 30 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) <=! (10 ... 30 :: Interval Double) -- True ---- --
-- >>> (20 ... 30 :: Interval Double) <=! (5 ... 10 :: Interval Double) -- False --(<=!) :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- == y -- -- Only singleton intervals or empty intervals can return true -- --
-- >>> (singleton 5 :: Interval Double) ==! (singleton 5 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) ==! (5 ... 10 :: Interval Double) -- False --(==!) :: Eq a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- >= y -- --
-- >>> (20 ... 40 :: Interval Double) >=! (10 ... 20 :: Interval Double) -- True ---- --
-- >>> (5 ... 20 :: Interval Double) >=! (15 ... 40 :: Interval Double) -- False --(>=!) :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- > y -- --
-- >>> (20 ... 40 :: Interval Double) >! (10 ... 19 :: Interval Double) -- True ---- --
-- >>> (5 ... 20 :: Interval Double) >! (15 ... 40 :: Interval Double) -- False --(>!) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x op y? possibly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x < y? () :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x <= y? (<=?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x == y? (==?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x >= y? (>=?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x > y? (>?) :: Ord a => Interval a -> Interval a -> Bool -- | The nearest value to that supplied which is contained in the interval. clamp :: Ord a => Interval a -> a -> a -- | Inflate an interval by enlarging it at both ends. -- --
-- >>> inflate 3 (-1 ... 7) -- -4 ... 10 ---- --
-- >>> inflate (-2) (0 ... 4) -- -2 ... 6 --inflate :: (Num a, Ord a) => a -> Interval a -> Interval a -- | Deflate an interval by shrinking it from both ends. Note that in cases -- that would result in an empty interval, the result is a singleton -- interval at the midpoint. -- --
-- >>> deflate 3.0 (-4.0 ... 10.0) -- -1.0 ... 7.0 ---- --
-- >>> deflate 2.0 (-1.0 ... 1.0) -- 0.0 ... 0.0 --deflate :: (Fractional a, Ord a) => a -> Interval a -> Interval a -- | Scale an interval about its midpoint. -- --
-- >>> scale 1.1 (-6.0 ... 4.0) -- -6.5 ... 4.5 ---- --
-- >>> scale (-2.0) (-1.0 ... 1.0) -- -2.0 ... 2.0 --scale :: (Fractional a, Ord a) => a -> Interval a -> Interval a -- | Construct a symmetric interval. -- --
-- >>> symmetric 3 -- -3 ... 3 ---- --
-- >>> symmetric (-2) -- -2 ... 2 --symmetric :: (Num a, Ord a) => a -> Interval a -- | id function. Useful for type specification -- --
-- >>> :t idouble (1 ... 3) -- idouble (1 ... 3) :: Interval Double --idouble :: Interval Double -> Interval Double -- | id function. Useful for type specification -- --
-- >>> :t ifloat (1 ... 3) -- ifloat (1 ... 3) :: Interval Float --ifloat :: Interval Float -> Interval Float instance Typeable Interval instance Data a => Data (Interval a) instance Generic (Interval a) instance Generic1 Interval instance Datatype D1Interval instance Constructor C1_0Interval instance RealFloat a => RealFloat (Interval a) instance (RealFloat a, Ord a) => Floating (Interval a) instance RealFrac a => RealFrac (Interval a) instance (Fractional a, Ord a) => Fractional (Interval a) instance Ord a => Ord (Interval a) instance Real a => Real (Interval a) instance (Num a, Ord a) => Num (Interval a) instance Show a => Show (Interval a) instance Eq a => Eq (Interval a) instance Foldable Interval -- | Interval arithmetic module Numeric.Interval.NonEmpty data Interval a -- | Create a non-empty interval, turning it around if necessary (...) :: Ord a => a -> a -> Interval a -- | Try to create a non-empty interval. interval :: Ord a => a -> a -> Maybe (Interval a) -- | The whole real number line -- --
-- >>> whole -- -Infinity ... Infinity --whole :: Fractional a => Interval a -- | A singleton point -- --
-- >>> singleton 1 -- 1 ... 1 --singleton :: a -> Interval a -- | Determine if a point is in the interval. -- --
-- >>> elem 3.2 (1.0 ... 5.0) -- True ---- --
-- >>> elem 5 (1.0 ... 5.0) -- True ---- --
-- >>> elem 1 (1.0 ... 5.0) -- True ---- --
-- >>> elem 8 (1.0 ... 5.0) -- False --elem :: Ord a => a -> Interval a -> Bool -- | Determine if a point is not included in the interval -- --
-- >>> notElem 8 (1.0 ... 5.0) -- True ---- --
-- >>> notElem 1.4 (1.0 ... 5.0) -- False --notElem :: Ord a => a -> Interval a -> Bool -- | The infinumum (lower bound) of an interval -- --
-- >>> inf (1 ... 20) -- 1 --inf :: Interval a -> a -- | The supremum (upper bound) of an interval -- --
-- >>> sup (1 ... 20) -- 20 --sup :: Interval a -> a -- | 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 -- --
-- >>> singular (singleton 1) -- True ---- --
-- >>> singular (1.0 ... 20.0) -- False --singular :: Ord a => Interval a -> Bool -- | Calculate the width of an interval. -- --
-- >>> width (1 ... 20) -- 19 ---- --
-- >>> width (singleton 1) -- 0 --width :: Num a => Interval a -> a -- | Nearest point to the midpoint of the interval. -- --
-- >>> midpoint (10.0 ... 20.0) -- 15.0 ---- --
-- >>> midpoint (singleton 5.0) -- 5.0 --midpoint :: Fractional a => Interval a -> a -- | Hausdorff distance between intervals. -- --
-- >>> distance (1 ... 7) (6 ... 10) -- 0 ---- --
-- >>> distance (1 ... 7) (15 ... 24) -- 8 ---- --
-- >>> distance (1 ... 7) (-10 ... -2) -- 3 --distance :: (Num a, Ord a) => Interval a -> Interval a -> a -- | Calculate the intersection of two intervals. -- --
-- >>> intersection (1 ... 10 :: Interval Double) (5 ... 15 :: Interval Double) -- Just (5.0 ... 10.0) --intersection :: Ord a => Interval a -> Interval a -> Maybe (Interval a) -- | Calculate the convex hull of two intervals -- --
-- >>> hull (0 ... 10 :: Interval Double) (5 ... 15 :: Interval Double) -- 0.0 ... 15.0 ---- --
-- >>> hull (15 ... 85 :: Interval Double) (0 ... 10 :: Interval Double) -- 0.0 ... 85.0 --hull :: Ord a => Interval a -> Interval a -> Interval a -- | Bisect an interval at its midpoint. -- --
-- >>> bisect (10.0 ... 20.0) -- (10.0 ... 15.0,15.0 ... 20.0) ---- --
-- >>> bisect (singleton 5.0) -- (5.0 ... 5.0,5.0 ... 5.0) --bisect :: Fractional a => Interval a -> (Interval a, Interval a) bisectIntegral :: Integral a => Interval a -> (Interval a, Interval a) -- | Magnitude -- --
-- >>> magnitude (1 ... 20) -- 20 ---- --
-- >>> magnitude (-20 ... 10) -- 20 ---- --
-- >>> magnitude (singleton 5) -- 5 --magnitude :: (Num a, Ord a) => Interval a -> a -- | "mignitude" -- --
-- >>> mignitude (1 ... 20) -- 1 ---- --
-- >>> mignitude (-20 ... 10) -- 0 ---- --
-- >>> mignitude (singleton 5) -- 5 --mignitude :: (Num a, Ord a) => Interval a -> a -- | Check if interval X totally contains interval Y -- --
-- >>> (20 ... 40 :: Interval Double) `contains` (25 ... 35 :: Interval Double) -- True ---- --
-- >>> (20 ... 40 :: Interval Double) `contains` (15 ... 35 :: Interval Double) -- False --contains :: Ord a => Interval a -> Interval a -> Bool -- | Flipped version of contains. Check if interval X a -- subset of interval Y -- --
-- >>> (25 ... 35 :: Interval Double) `isSubsetOf` (20 ... 40 :: Interval Double) -- True ---- --
-- >>> (20 ... 40 :: Interval Double) `isSubsetOf` (15 ... 35 :: Interval Double) -- False --isSubsetOf :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- op y certainly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- < y -- --
-- >>> (5 ... 10 :: Interval Double) <! (20 ... 30 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) <! (10 ... 30 :: Interval Double) -- False ---- --
-- >>> (20 ... 30 :: Interval Double) <! (5 ... 10 :: Interval Double) -- False --( Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- <= y -- --
-- >>> (5 ... 10 :: Interval Double) <=! (20 ... 30 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) <=! (10 ... 30 :: Interval Double) -- True ---- --
-- >>> (20 ... 30 :: Interval Double) <=! (5 ... 10 :: Interval Double) -- False --(<=!) :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- == y -- -- Only singleton intervals or empty intervals can return true -- --
-- >>> (singleton 5 :: Interval Double) ==! (singleton 5 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) ==! (5 ... 10 :: Interval Double) -- False --(==!) :: Eq a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- >= y -- --
-- >>> (20 ... 40 :: Interval Double) >=! (10 ... 20 :: Interval Double) -- True ---- --
-- >>> (5 ... 20 :: Interval Double) >=! (15 ... 40 :: Interval Double) -- False --(>=!) :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- > y -- --
-- >>> (20 ... 40 :: Interval Double) >! (10 ... 19 :: Interval Double) -- True ---- --
-- >>> (5 ... 20 :: Interval Double) >! (15 ... 40 :: Interval Double) -- False --(>!) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x op y? possibly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x < y? () :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x <= y? (<=?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x == y? (==?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x >= y? (>=?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x > y? (>?) :: Ord a => Interval a -> Interval a -> Bool -- | The nearest value to that supplied which is contained in the interval. clamp :: Ord a => Interval a -> a -> a -- | Inflate an interval by enlarging it at both ends. -- --
-- >>> inflate 3 (-1 ... 7) -- -4 ... 10 ---- --
-- >>> inflate (-2) (0 ... 4) -- -2 ... 6 --inflate :: (Num a, Ord a) => a -> Interval a -> Interval a -- | Deflate an interval by shrinking it from both ends. Note that in cases -- that would result in an empty interval, the result is a singleton -- interval at the midpoint. -- --
-- >>> deflate 3.0 (-4.0 ... 10.0) -- -1.0 ... 7.0 ---- --
-- >>> deflate 2.0 (-1.0 ... 1.0) -- 0.0 ... 0.0 --deflate :: (Fractional a, Ord a) => a -> Interval a -> Interval a -- | Scale an interval about its midpoint. -- --
-- >>> scale 1.1 (-6.0 ... 4.0) -- -6.5 ... 4.5 ---- --
-- >>> scale (-2.0) (-1.0 ... 1.0) -- -2.0 ... 2.0 --scale :: (Fractional a, Ord a) => a -> Interval a -> Interval a -- | Construct a symmetric interval. -- --
-- >>> symmetric 3 -- -3 ... 3 ---- --
-- >>> symmetric (-2) -- -2 ... 2 --symmetric :: (Num a, Ord a) => a -> Interval a -- | id function. Useful for type specification -- --
-- >>> :t idouble (1 ... 3) -- idouble (1 ... 3) :: Interval Double --idouble :: Interval Double -> Interval Double -- | id function. Useful for type specification -- --
-- >>> :t ifloat (1 ... 3) -- ifloat (1 ... 3) :: Interval Float --ifloat :: Interval Float -> Interval Float -- | Interval arithmetic module Numeric.Interval.Internal data Interval a I :: !a -> !a -> Interval a Empty :: Interval a (...) :: Ord a => a -> a -> Interval a (+/-) :: (Num a, Ord a) => a -> a -> Interval a interval :: Ord a => a -> a -> Maybe (Interval a) -- | The whole real number line -- --
-- >>> whole -- -Infinity ... Infinity --whole :: Fractional a => Interval a -- | An empty interval -- --
-- >>> empty -- Empty --empty :: Ord a => Interval a -- | Check if an interval is empty -- --
-- >>> null (1 ... 5) -- False ---- --
-- >>> null (1 ... 1) -- False ---- --
-- >>> null empty -- True --null :: Interval a -> Bool -- | A singleton point -- --
-- >>> singleton 1 -- 1 ... 1 --singleton :: a -> Interval a -- | Determine if a point is in the interval. -- --
-- >>> elem 3.2 (1.0 ... 5.0) -- True ---- --
-- >>> elem 5 (1.0 ... 5.0) -- True ---- --
-- >>> elem 1 (1.0 ... 5.0) -- True ---- --
-- >>> elem 8 (1.0 ... 5.0) -- False ---- --
-- >>> elem 5 empty -- False --elem :: Ord a => a -> Interval a -> Bool -- | Determine if a point is not included in the interval -- --
-- >>> notElem 8 (1.0 ... 5.0) -- True ---- --
-- >>> notElem 1.4 (1.0 ... 5.0) -- False ---- -- And of course, nothing is a member of the empty interval. -- --
-- >>> notElem 5 empty -- True --notElem :: Ord a => a -> Interval a -> Bool -- | The infimum (lower bound) of an interval -- --
-- >>> inf (1.0 ... 20.0) -- 1.0 ---- --
-- >>> inf empty -- *** Exception: empty interval --inf :: Interval a -> a -- | The supremum (upper bound) of an interval -- --
-- >>> sup (1.0 ... 20.0) -- 20.0 ---- --
-- >>> sup empty -- *** Exception: empty interval --sup :: Interval a -> a -- | 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 -- --
-- >>> singular (singleton 1) -- True ---- --
-- >>> singular (1.0 ... 20.0) -- False --singular :: Ord a => Interval a -> Bool -- | Calculate the width of an interval. -- --
-- >>> width (1 ... 20) -- 19 ---- --
-- >>> width (singleton 1) -- 0 ---- --
-- >>> width empty -- 0 --width :: Num a => Interval a -> a -- | Nearest point to the midpoint of the interval. -- --
-- >>> midpoint (10.0 ... 20.0) -- 15.0 ---- --
-- >>> midpoint (singleton 5.0) -- 5.0 ---- --
-- >>> midpoint empty -- *** Exception: empty interval --midpoint :: Fractional a => Interval a -> a -- | Calculate the intersection of two intervals. -- --
-- >>> intersection (1 ... 10 :: Interval Double) (5 ... 15 :: Interval Double) -- 5.0 ... 10.0 --intersection :: Ord a => Interval a -> Interval a -> Interval a -- | Calculate the convex hull of two intervals -- --
-- >>> hull (0 ... 10 :: Interval Double) (5 ... 15 :: Interval Double) -- 0.0 ... 15.0 ---- --
-- >>> hull (15 ... 85 :: Interval Double) (0 ... 10 :: Interval Double) -- 0.0 ... 85.0 --hull :: Ord a => Interval a -> Interval a -> Interval a -- | Bisect an interval at its midpoint. -- --
-- >>> bisect (10.0 ... 20.0) -- (10.0 ... 15.0,15.0 ... 20.0) ---- --
-- >>> bisect (singleton 5.0) -- (5.0 ... 5.0,5.0 ... 5.0) ---- --
-- >>> bisect Empty -- (Empty,Empty) --bisect :: Fractional a => Interval a -> (Interval a, Interval a) bisectIntegral :: Integral a => Interval a -> (Interval a, Interval a) -- | Magnitude -- --
-- >>> magnitude (1 ... 20) -- 20 ---- --
-- >>> magnitude (-20 ... 10) -- 20 ---- --
-- >>> magnitude (singleton 5) -- 5 ---- -- throws EmptyInterval if the interval is empty. -- --
-- >>> magnitude empty -- *** Exception: empty interval --magnitude :: (Num a, Ord a) => Interval a -> a -- | "mignitude" -- --
-- >>> mignitude (1 ... 20) -- 1 ---- --
-- >>> mignitude (-20 ... 10) -- 0 ---- --
-- >>> mignitude (singleton 5) -- 5 ---- -- throws EmptyInterval if the interval is empty. -- --
-- >>> mignitude empty -- *** Exception: empty interval --mignitude :: (Num a, Ord a) => Interval a -> a -- | Hausdorff distance between intervals. -- --
-- >>> distance (1 ... 7) (6 ... 10) -- 0 ---- --
-- >>> distance (1 ... 7) (15 ... 24) -- 8 ---- --
-- >>> distance (1 ... 7) (-10 ... -2) -- 3 ---- --
-- >>> distance Empty (1 ... 1) -- *** Exception: empty interval --distance :: (Num a, Ord a) => Interval a -> Interval a -> a -- | Inflate an interval by enlarging it at both ends. -- --
-- >>> inflate 3 (-1 ... 7) -- -4 ... 10 ---- --
-- >>> inflate (-2) (0 ... 4) -- -2 ... 6 ---- --
-- >>> inflate 1 empty -- Empty --inflate :: (Num a, Ord a) => a -> Interval a -> Interval a -- | Deflate an interval by shrinking it from both ends. -- --
-- >>> deflate 3.0 (-4.0 ... 10.0) -- -1.0 ... 7.0 ---- --
-- >>> deflate 2.0 (-1.0 ... 1.0) -- Empty ---- --
-- >>> deflate 1.0 empty -- Empty --deflate :: (Fractional a, Ord a) => a -> Interval a -> Interval a -- | Scale an interval about its midpoint. -- --
-- >>> scale 1.1 (-6.0 ... 4.0) -- -6.5 ... 4.5 ---- --
-- >>> scale (-2.0) (-1.0 ... 1.0) -- Empty ---- --
-- >>> scale 3.0 empty -- Empty --scale :: (Fractional a, Ord a) => a -> Interval a -> Interval a -- | Construct a symmetric interval. -- --
-- >>> symmetric 3 -- -3 ... 3 ---- --
-- >>> symmetric (-2) -- -2 ... 2 --symmetric :: (Num a, Ord a) => a -> Interval a -- | Check if interval X totally contains interval Y -- --
-- >>> (20 ... 40 :: Interval Double) `contains` (25 ... 35 :: Interval Double) -- True ---- --
-- >>> (20 ... 40 :: Interval Double) `contains` (15 ... 35 :: Interval Double) -- False --contains :: Ord a => Interval a -> Interval a -> Bool -- | Flipped version of contains. Check if interval X a -- subset of interval Y -- --
-- >>> (25 ... 35 :: Interval Double) `isSubsetOf` (20 ... 40 :: Interval Double) -- True ---- --
-- >>> (20 ... 40 :: Interval Double) `isSubsetOf` (15 ... 35 :: Interval Double) -- False --isSubsetOf :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- op y certainly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- < y -- --
-- >>> (5 ... 10 :: Interval Double) <! (20 ... 30 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) <! (10 ... 30 :: Interval Double) -- False ---- --
-- >>> (20 ... 30 :: Interval Double) <! (5 ... 10 :: Interval Double) -- False --( Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- <= y -- --
-- >>> (5 ... 10 :: Interval Double) <=! (20 ... 30 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) <=! (10 ... 30 :: Interval Double) -- True ---- --
-- >>> (20 ... 30 :: Interval Double) <=! (5 ... 10 :: Interval Double) -- False --(<=!) :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- == y -- -- Only singleton intervals or empty intervals can return true -- --
-- >>> (singleton 5 :: Interval Double) ==! (singleton 5 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) ==! (5 ... 10 :: Interval Double) -- False --(==!) :: Eq a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- >= y -- --
-- >>> (20 ... 40 :: Interval Double) >=! (10 ... 20 :: Interval Double) -- True ---- --
-- >>> (5 ... 20 :: Interval Double) >=! (15 ... 40 :: Interval Double) -- False --(>=!) :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- > y -- --
-- >>> (20 ... 40 :: Interval Double) >! (10 ... 19 :: Interval Double) -- True ---- --
-- >>> (5 ... 20 :: Interval Double) >! (15 ... 40 :: Interval Double) -- False --(>!) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x op y? possibly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x < y? () :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x <= y? (<=?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x == y? (==?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x >= y? (>=?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x > y? (>?) :: Ord a => Interval a -> Interval a -> Bool -- | id function. Useful for type specification -- --
-- >>> :t idouble (1 ... 3) -- idouble (1 ... 3) :: Interval Double --idouble :: Interval Double -> Interval Double -- | id function. Useful for type specification -- --
-- >>> :t ifloat (1 ... 3) -- ifloat (1 ... 3) :: Interval Float --ifloat :: Interval Float -> Interval Float instance Typeable Interval instance Data a => Data (Interval a) instance Generic (Interval a) instance Generic1 Interval instance Datatype D1Interval instance Constructor C1_0Interval instance Constructor C1_1Interval instance RealFloat a => RealFloat (Interval a) instance (RealFloat a, Ord a) => Floating (Interval a) instance RealFrac a => RealFrac (Interval a) instance (Fractional a, Ord a) => Fractional (Interval a) instance Ord a => Ord (Interval a) instance Real a => Real (Interval a) instance (Num a, Ord a) => Num (Interval a) instance Show a => Show (Interval a) instance Eq a => Eq (Interval a) instance Foldable Interval -- | Interval arithmetic module Numeric.Interval data Interval a (...) :: Ord a => a -> a -> Interval a (+/-) :: (Num a, Ord a) => a -> a -> Interval a interval :: Ord a => a -> a -> Maybe (Interval a) -- | The whole real number line -- --
-- >>> whole -- -Infinity ... Infinity --whole :: Fractional a => Interval a -- | An empty interval -- --
-- >>> empty -- Empty --empty :: Ord a => Interval a -- | Check if an interval is empty -- --
-- >>> null (1 ... 5) -- False ---- --
-- >>> null (1 ... 1) -- False ---- --
-- >>> null empty -- True --null :: Interval a -> Bool -- | A singleton point -- --
-- >>> singleton 1 -- 1 ... 1 --singleton :: a -> Interval a -- | Determine if a point is in the interval. -- --
-- >>> elem 3.2 (1.0 ... 5.0) -- True ---- --
-- >>> elem 5 (1.0 ... 5.0) -- True ---- --
-- >>> elem 1 (1.0 ... 5.0) -- True ---- --
-- >>> elem 8 (1.0 ... 5.0) -- False ---- --
-- >>> elem 5 empty -- False --elem :: Ord a => a -> Interval a -> Bool -- | Determine if a point is not included in the interval -- --
-- >>> notElem 8 (1.0 ... 5.0) -- True ---- --
-- >>> notElem 1.4 (1.0 ... 5.0) -- False ---- -- And of course, nothing is a member of the empty interval. -- --
-- >>> notElem 5 empty -- True --notElem :: Ord a => a -> Interval a -> Bool -- | The infimum (lower bound) of an interval -- --
-- >>> inf (1.0 ... 20.0) -- 1.0 ---- --
-- >>> inf empty -- *** Exception: empty interval --inf :: Interval a -> a -- | The supremum (upper bound) of an interval -- --
-- >>> sup (1.0 ... 20.0) -- 20.0 ---- --
-- >>> sup empty -- *** Exception: empty interval --sup :: Interval a -> a -- | 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 -- --
-- >>> singular (singleton 1) -- True ---- --
-- >>> singular (1.0 ... 20.0) -- False --singular :: Ord a => Interval a -> Bool -- | Calculate the width of an interval. -- --
-- >>> width (1 ... 20) -- 19 ---- --
-- >>> width (singleton 1) -- 0 ---- --
-- >>> width empty -- 0 --width :: Num a => Interval a -> a -- | Nearest point to the midpoint of the interval. -- --
-- >>> midpoint (10.0 ... 20.0) -- 15.0 ---- --
-- >>> midpoint (singleton 5.0) -- 5.0 ---- --
-- >>> midpoint empty -- *** Exception: empty interval --midpoint :: Fractional a => Interval a -> a -- | Calculate the intersection of two intervals. -- --
-- >>> intersection (1 ... 10 :: Interval Double) (5 ... 15 :: Interval Double) -- 5.0 ... 10.0 --intersection :: Ord a => Interval a -> Interval a -> Interval a -- | Calculate the convex hull of two intervals -- --
-- >>> hull (0 ... 10 :: Interval Double) (5 ... 15 :: Interval Double) -- 0.0 ... 15.0 ---- --
-- >>> hull (15 ... 85 :: Interval Double) (0 ... 10 :: Interval Double) -- 0.0 ... 85.0 --hull :: Ord a => Interval a -> Interval a -> Interval a -- | Bisect an interval at its midpoint. -- --
-- >>> bisect (10.0 ... 20.0) -- (10.0 ... 15.0,15.0 ... 20.0) ---- --
-- >>> bisect (singleton 5.0) -- (5.0 ... 5.0,5.0 ... 5.0) ---- --
-- >>> bisect Empty -- (Empty,Empty) --bisect :: Fractional a => Interval a -> (Interval a, Interval a) bisectIntegral :: Integral a => Interval a -> (Interval a, Interval a) -- | Magnitude -- --
-- >>> magnitude (1 ... 20) -- 20 ---- --
-- >>> magnitude (-20 ... 10) -- 20 ---- --
-- >>> magnitude (singleton 5) -- 5 ---- -- throws EmptyInterval if the interval is empty. -- --
-- >>> magnitude empty -- *** Exception: empty interval --magnitude :: (Num a, Ord a) => Interval a -> a -- | "mignitude" -- --
-- >>> mignitude (1 ... 20) -- 1 ---- --
-- >>> mignitude (-20 ... 10) -- 0 ---- --
-- >>> mignitude (singleton 5) -- 5 ---- -- throws EmptyInterval if the interval is empty. -- --
-- >>> mignitude empty -- *** Exception: empty interval --mignitude :: (Num a, Ord a) => Interval a -> a -- | Hausdorff distance between intervals. -- --
-- >>> distance (1 ... 7) (6 ... 10) -- 0 ---- --
-- >>> distance (1 ... 7) (15 ... 24) -- 8 ---- --
-- >>> distance (1 ... 7) (-10 ... -2) -- 3 ---- --
-- >>> distance Empty (1 ... 1) -- *** Exception: empty interval --distance :: (Num a, Ord a) => Interval a -> Interval a -> a -- | Inflate an interval by enlarging it at both ends. -- --
-- >>> inflate 3 (-1 ... 7) -- -4 ... 10 ---- --
-- >>> inflate (-2) (0 ... 4) -- -2 ... 6 ---- --
-- >>> inflate 1 empty -- Empty --inflate :: (Num a, Ord a) => a -> Interval a -> Interval a -- | Deflate an interval by shrinking it from both ends. -- --
-- >>> deflate 3.0 (-4.0 ... 10.0) -- -1.0 ... 7.0 ---- --
-- >>> deflate 2.0 (-1.0 ... 1.0) -- Empty ---- --
-- >>> deflate 1.0 empty -- Empty --deflate :: (Fractional a, Ord a) => a -> Interval a -> Interval a -- | Scale an interval about its midpoint. -- --
-- >>> scale 1.1 (-6.0 ... 4.0) -- -6.5 ... 4.5 ---- --
-- >>> scale (-2.0) (-1.0 ... 1.0) -- Empty ---- --
-- >>> scale 3.0 empty -- Empty --scale :: (Fractional a, Ord a) => a -> Interval a -> Interval a -- | Construct a symmetric interval. -- --
-- >>> symmetric 3 -- -3 ... 3 ---- --
-- >>> symmetric (-2) -- -2 ... 2 --symmetric :: (Num a, Ord a) => a -> Interval a -- | Check if interval X totally contains interval Y -- --
-- >>> (20 ... 40 :: Interval Double) `contains` (25 ... 35 :: Interval Double) -- True ---- --
-- >>> (20 ... 40 :: Interval Double) `contains` (15 ... 35 :: Interval Double) -- False --contains :: Ord a => Interval a -> Interval a -> Bool -- | Flipped version of contains. Check if interval X a -- subset of interval Y -- --
-- >>> (25 ... 35 :: Interval Double) `isSubsetOf` (20 ... 40 :: Interval Double) -- True ---- --
-- >>> (20 ... 40 :: Interval Double) `isSubsetOf` (15 ... 35 :: Interval Double) -- False --isSubsetOf :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- op y certainly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- < y -- --
-- >>> (5 ... 10 :: Interval Double) <! (20 ... 30 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) <! (10 ... 30 :: Interval Double) -- False ---- --
-- >>> (20 ... 30 :: Interval Double) <! (5 ... 10 :: Interval Double) -- False --( Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- <= y -- --
-- >>> (5 ... 10 :: Interval Double) <=! (20 ... 30 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) <=! (10 ... 30 :: Interval Double) -- True ---- --
-- >>> (20 ... 30 :: Interval Double) <=! (5 ... 10 :: Interval Double) -- False --(<=!) :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- == y -- -- Only singleton intervals or empty intervals can return true -- --
-- >>> (singleton 5 :: Interval Double) ==! (singleton 5 :: Interval Double) -- True ---- --
-- >>> (5 ... 10 :: Interval Double) ==! (5 ... 10 :: Interval Double) -- False --(==!) :: Eq a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- >= y -- --
-- >>> (20 ... 40 :: Interval Double) >=! (10 ... 20 :: Interval Double) -- True ---- --
-- >>> (5 ... 20 :: Interval Double) >=! (15 ... 40 :: Interval Double) -- False --(>=!) :: Ord a => Interval a -> Interval a -> Bool -- | For all x in X, y in Y. x -- > y -- --
-- >>> (20 ... 40 :: Interval Double) >! (10 ... 19 :: Interval Double) -- True ---- --
-- >>> (5 ... 20 :: Interval Double) >! (15 ... 40 :: Interval Double) -- False --(>!) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x op y? possibly :: Ord a => (forall b. Ord b => b -> b -> Bool) -> Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x < y? () :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x <= y? (<=?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x == y? (==?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x >= y? (>=?) :: Ord a => Interval a -> Interval a -> Bool -- | Does there exist an x in X, y in Y -- such that x > y? (>?) :: Ord a => Interval a -> Interval a -> Bool -- | id function. Useful for type specification -- --
-- >>> :t idouble (1 ... 3) -- idouble (1 ... 3) :: Interval Double --idouble :: Interval Double -> Interval Double -- | id function. Useful for type specification -- --
-- >>> :t ifloat (1 ... 3) -- ifloat (1 ... 3) :: Interval Float --ifloat :: Interval Float -> Interval Float