| Copyright | (c) Frank Staals |
|---|---|
| License | See LICENCE file |
| Safe Haskell | None |
| Language | Haskell2010 |
Data.Range
Description
Synopsis
- data EndPoint a
- isOpen :: EndPoint a -> Bool
- isClosed :: EndPoint a -> Bool
- unEndPoint :: Lens (EndPoint a) (EndPoint b) a b
- data Range a = Range {}
- prettyShow :: Show a => Range a -> String
- lower :: forall a. Lens' (Range a) (EndPoint a)
- upper :: forall a. Lens' (Range a) (EndPoint a)
- pattern OpenRange :: a -> a -> Range a
- pattern ClosedRange :: a -> a -> Range a
- pattern Range' :: a -> a -> Range a
- inRange :: Ord a => a -> Range a -> Bool
- width :: Num r => Range r -> r
- clipLower :: Ord a => EndPoint a -> Range a -> Maybe (Range a)
- clipUpper :: Ord a => EndPoint a -> Range a -> Maybe (Range a)
- midPoint :: Fractional r => Range r -> r
- isValid :: Ord a => Range a -> Bool
- covers :: Ord a => Range a -> Range a -> Bool
- shiftLeft :: Num r => r -> Range r -> Range r
- shiftRight :: Num r => r -> Range r -> Range r
Documentation
Endpoints of a range may either be open or closed.
Instances
Data type for representing ranges.
Instances
pattern ClosedRange :: a -> a -> Range a Source #
pattern Range' :: a -> a -> Range a Source #
A range from l to u, ignoring/forgetting the type of the endpoints
inRange :: Ord a => a -> Range a -> Bool Source #
Test if a value lies in a range.
>>>1 `inRange` (OpenRange 0 2)True>>>1 `inRange` (OpenRange 0 1)False>>>1 `inRange` (ClosedRange 0 1)True>>>1 `inRange` (ClosedRange 1 1)True>>>10 `inRange` (OpenRange 1 10)False>>>10 `inRange` (ClosedRange 0 1)False
width :: Num r => Range r -> r Source #
Get the width of the interval
>>>width $ ClosedRange 1 109>>>width $ OpenRange 5 105
clipLower :: Ord a => EndPoint a -> Range a -> Maybe (Range a) Source #
Clip the interval from below. I.e. intersect with the interval {l,infty), where { is either open, (, orr closed, [.
clipUpper :: Ord a => EndPoint a -> Range a -> Maybe (Range a) Source #
Clip the interval from above. I.e. intersect with (-infty, u}, where } is either open, ), or closed, ],
midPoint :: Fractional r => Range r -> r Source #
isValid :: Ord a => Range a -> Bool Source #
Check if the range is valid and nonEmpty, i.e. if the lower endpoint is indeed smaller than the right endpoint. Note that we treat empty open-ranges as invalid as well.
covers :: Ord a => Range a -> Range a -> Bool Source #
Wether or not the first range completely covers the second one