r-k-b/elm-interval/1.1.0

NOTE: this package is not compatible with Elm 0.19.1

Interval

A representation of numeric intervals (also known as ranges.)

Types

An interval over the reals. May be over either the Ordinary Reals (-∞, +∞) or the Extended Reals [-∞, +∞]. Bounded x y will always satisfy x < y. (x == y is either degenerate or empty)

(Opaque type; do not export tags)

type Bound

Opaque type; do not export tags.

Constructors

interval is the primary constructor; the others are just for convenience.

interval : Bound -> Bound -> Interval

Constructs an Interval from two Bounds.

degenerate : Float -> Interval

A degenerate Interval.

empty : Interval

An empty Interval.

leftBounded : Bound -> Interval

Convenience function for a left-bounded Interval (from some n to +∞)

rightBounded : Bound -> Interval

Convenience function for a right-bounded Interval (from -∞ to some n)

unbounded : Interval

An unbounded Interval over the Extended Reals. [-∞, +∞]

Endpoint (Bound) constructors

excludes : Float -> Bound

An exclusive endpoint of an interval.

includes : Float -> Bound

An inclusive endpoint of an interval.

Operations on Intervals

hull : Interval -> Interval -> Interval

The convex hull of two intervals. This is similar to union in that it includes all the points of the component intervals, and for non-overlapping intervals, the points between them.

intersection : Interval -> Interval -> Interval

The intersection of two intervals. If the intervals overlap, this is the common part. If not, this is the empty interval.

intervalToString : Interval -> String

Return a String representation of an Interval.

interior : Interval -> Interval

Returns the largest open interval contained within a.

-- `interior([x, y]) == (x, y)`
interior (interval (includes 0) (includes 2)) == interval (excludes 0) (excludes 2)
closure : Interval -> Interval

Returns the smallest closed interval containing a.

-- `closure((x, y)) == [x, y]`
interior (interval (excludes 0) (excludes 2)) == interval (includes 0) (includes 2)
upperBoundValue : Interval -> Maybe Float

Extract the value of the upper bound of an Interval.

lowerBoundValue : Interval -> Maybe Float

Extract the value of the lower bound of an Interval.

Tests on Intervals

adjoins : Interval -> Interval -> Bool

Are these two intervals adjoins? I.e., do they share an upper-lower or lower-upper bound, exactly one of which is closed, and do not intersect each other?

let
    a = interval (includes 1) (excludes 3)  -- [1, 3)
    b = interval (includes 2) (includes 4)  -- [3, 4]
    c = interval (includes 3) (includes 4)  -- (3, 4]
    d = interval (includes 3) (includes 4)  -- [2, 3]
in
    [ adjoins a b = True
    , adjoins a c = False
    , adjoins a d = False
    ]
intersects : Interval -> Interval -> Bool

Do these two intervals intersect?

let
    a = interval (includes 1) (excludes 3)
    b = interval (includes 2) (includes 4)
    c = interval (includes 3) (includes 4)
in
    [ intersects a b = True
    , intersects a c = False
    ]
intersectsPoint : Interval -> Float -> Bool

Does this interval contain the given point?

let
    a = interval (includes 1) (excludes 3)
in
    [ intersectsPoint a 0 = False
    , intersectsPoint a 1 = True
    , intersectsPoint a 3 = False
    ]
isBounded : Interval -> Bool

Does this interval have finite bounds?

isDegenerate : Interval -> Bool

Is this a degenerate (point-valued) interval?

isEmpty : Interval -> Bool

Is this an empty interval?

isLeftBounded : Interval -> Bool

Does this interval have a finite lower bound, and an infinite upper bound?

isRightBounded : Interval -> Bool

Does this interval have a finite upper bound, and an infinite lower bound?

isLeftOpen : Interval -> Bool

Is the lower bound of this interval open?

isRightOpen : Interval -> Bool

Is the upper bound of this interval open?

Related reading