interval-algebra-0.6.0: An implementation of Allen's interval algebra for temporal logic
Copyright(c) NoviSci Inc 2020
LicenseBSD3
Maintainerbsaul@novisci.com
Stabilityexperimental
Safe HaskellNone
LanguageHaskell2010

IntervalAlgebra

Description

The IntervalAlgebra module provides data types and related classes for the interval-based temporal logic described in Allen (1983) and axiomatized in Allen and Hayes (1987).

A good primer on Allen's algebra can be found here.

Design

The module is built around four typeclasses designed to separate concerns of constructing, relating, and combining types that contain Intervals:

  1. Intervallic provides an interface to the data structures which contain an Interval.
  2. IntervalAlgebraic provides an interface to the IntervalRelations, the workhorse of Allen's temporal logic.
  3. IntervalCombinable provides an interface to methods of combining two Intervals.
  4. IntervalSizeable provides methods for measuring and modifying the size of an interval.

An advantage of nested typeclass design is that developers can define an Interval of type a with just the amount of structure that they need.

Total Ordering of Intervals

The modules makes the (opinionated) choice of a total ordering for Intervallic Intervals. Namely, the ordering is based on first ordering the begins then the ends.

Development

This module is under development and the API may change in the future.

Synopsis

Classes

class Ord a => Intervallic i a where Source #

The Intervallic typeclass defines how to get and set the Interval content of a data structure. It also includes functions for getting the begin and end this data.

Minimal complete definition

getInterval, setInterval

Methods

getInterval :: i a -> Interval a Source #

Get the interval from an i a

setInterval :: i a -> Interval a -> i a Source #

Set the interval in an i a

begin :: i a -> a Source #

Access the ends of an i a .

end :: i a -> a Source #

Access the ends of an i a .

Instances

Instances details
(Ord a, Show a) => Intervallic Interval a Source # 
Instance details

Defined in IntervalAlgebra

Ord a => Intervallic (PairedInterval b) a Source # 
Instance details

Defined in IntervalAlgebra.PairedInterval

class (Eq (i a), Intervallic i a) => IntervalAlgebraic i a where Source #

The IntervalAlgebraic typeclass specifies the functions and relational operators for interval-based temporal logic. The typeclass defines the relational operators for types that contain an 'Interval a', plus other useful utilities such as disjoint, within, and unionPredicates.

Minimal complete definition

Nothing

Methods

relate :: i a -> i a -> IntervalRelation (i a) Source #

Compare two i a to determine their IntervalRelation.

predicate' :: IntervalRelation (i a) -> ComparativePredicateOf (i a) Source #

Maps an IntervalRelation to its corresponding predicate function.

predicates :: Set (IntervalRelation (i a)) -> [ComparativePredicateOf (i a)] Source #

Given a set of IntervalRelations return a list of predicate functions corresponding to each relation.

predicate :: Set (IntervalRelation (i a)) -> ComparativePredicateOf (i a) Source #

Forms a predicate function from the union of a set of IntervalRelations.

toSet :: [IntervalRelation (i a)] -> Set (IntervalRelation (i a)) Source #

Shortcut to creating a 'Set IntervalRelation' from a list.

compose :: IntervalRelation (i a) -> IntervalRelation (i a) -> Set (IntervalRelation (i a)) Source #

Compose two interval relations according to the rules of the algebra. The rules are enumerated according to this table.

complement :: Set (IntervalRelation (i a)) -> Set (IntervalRelation (i a)) Source #

Finds the complement of a 'Set IntervalRelation'.

intersection :: Set (IntervalRelation (i a)) -> Set (IntervalRelation (i a)) -> Set (IntervalRelation (i a)) Source #

Find the intersection of two Sets of IntervalRelations.

union :: Set (IntervalRelation (i a)) -> Set (IntervalRelation (i a)) -> Set (IntervalRelation (i a)) Source #

Find the union of two Sets of IntervalRelations.

converse :: Set (IntervalRelation (i a)) -> Set (IntervalRelation (i a)) Source #

Find the converse of a 'Set IntervalRelation'.

equals :: ComparativePredicateOf (i a) Source #

Does x equal y?

meets :: ComparativePredicateOf (i a) Source #

Does x meet y? Is y metBy x?

metBy :: ComparativePredicateOf (i a) Source #

Does x meet y? Is y metBy x?

before :: ComparativePredicateOf (i a) Source #

Is x before y? Is x after y?

after :: ComparativePredicateOf (i a) Source #

Is x before y? Is x after y?

overlaps :: ComparativePredicateOf (i a) Source #

Does x overlap y? Is x overlapped by y?

overlappedBy :: ComparativePredicateOf (i a) Source #

Does x overlap y? Is x overlapped by y?

starts :: ComparativePredicateOf (i a) Source #

Does x start y? Is x started by y?

startedBy :: ComparativePredicateOf (i a) Source #

Does x start y? Is x started by y?

precedes :: ComparativePredicateOf (i a) Source #

Synonyms for starts and startedBy

precededBy :: ComparativePredicateOf (i a) Source #

Synonyms for starts and startedBy

finishes :: ComparativePredicateOf (i a) Source #

Does x finish y? Is x finished by y?

finishedBy :: ComparativePredicateOf (i a) Source #

Does x finish y? Is x finished by y?

during :: ComparativePredicateOf (i a) Source #

Is x during y? Does x contain y?

contains :: ComparativePredicateOf (i a) Source #

Is x during y? Does x contain y?

unionPredicates :: [ComparativePredicateOf (i a)] -> ComparativePredicateOf (i a) Source #

Compose a list of interval relations with _or_ to create a new ComparativePredicateOf i a. For example, unionPredicates [before, meets] creates a predicate function determining if one interval is either before or meets another interval.

(<|>) :: ComparativePredicateOf (i a) -> ComparativePredicateOf (i a) -> ComparativePredicateOf (i a) Source #

Operator for composing the union of two predicates

disjointRelations :: Set (IntervalRelation (i a)) Source #

withinRelations :: Set (IntervalRelation (i a)) Source #

disjoint :: ComparativePredicateOf (i a) Source #

Are x and y disjoint (before, after, meets, or metBy)?

notDisjoint :: ComparativePredicateOf (i a) Source #

Are x and y not disjoint; i.e. do they share any support?

concur :: ComparativePredicateOf (i a) Source #

A synonym for notDisjoint.

within :: ComparativePredicateOf (i a) Source #

Is x entirely *within* the endpoints of y? That is, during, starts, finishes, or equals?

enclose :: ComparativePredicateOf (i a) Source #

Does x enclose y? That is, is y within x?

enclosedBy :: ComparativePredicateOf (i a) Source #

Synonym for within.

Instances

Instances details
IntervalAlgebraic Interval Int Source # 
Instance details

Defined in IntervalAlgebra

Methods

relate :: Interval Int -> Interval Int -> IntervalRelation (Interval Int) Source #

predicate' :: IntervalRelation (Interval Int) -> ComparativePredicateOf (Interval Int) Source #

predicates :: Set (IntervalRelation (Interval Int)) -> [ComparativePredicateOf (Interval Int)] Source #

predicate :: Set (IntervalRelation (Interval Int)) -> ComparativePredicateOf (Interval Int) Source #

toSet :: [IntervalRelation (Interval Int)] -> Set (IntervalRelation (Interval Int)) Source #

compose :: IntervalRelation (Interval Int) -> IntervalRelation (Interval Int) -> Set (IntervalRelation (Interval Int)) Source #

complement :: Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) Source #

intersection :: Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) Source #

union :: Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) Source #

converse :: Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) Source #

equals :: ComparativePredicateOf (Interval Int) Source #

meets :: ComparativePredicateOf (Interval Int) Source #

metBy :: ComparativePredicateOf (Interval Int) Source #

before :: ComparativePredicateOf (Interval Int) Source #

after :: ComparativePredicateOf (Interval Int) Source #

overlaps :: ComparativePredicateOf (Interval Int) Source #

overlappedBy :: ComparativePredicateOf (Interval Int) Source #

starts :: ComparativePredicateOf (Interval Int) Source #

startedBy :: ComparativePredicateOf (Interval Int) Source #

precedes :: ComparativePredicateOf (Interval Int) Source #

precededBy :: ComparativePredicateOf (Interval Int) Source #

finishes :: ComparativePredicateOf (Interval Int) Source #

finishedBy :: ComparativePredicateOf (Interval Int) Source #

during :: ComparativePredicateOf (Interval Int) Source #

contains :: ComparativePredicateOf (Interval Int) Source #

unionPredicates :: [ComparativePredicateOf (Interval Int)] -> ComparativePredicateOf (Interval Int) Source #

(<|>) :: ComparativePredicateOf (Interval Int) -> ComparativePredicateOf (Interval Int) -> ComparativePredicateOf (Interval Int) Source #

disjointRelations :: Set (IntervalRelation (Interval Int)) Source #

withinRelations :: Set (IntervalRelation (Interval Int)) Source #

disjoint :: ComparativePredicateOf (Interval Int) Source #

notDisjoint :: ComparativePredicateOf (Interval Int) Source #

concur :: ComparativePredicateOf (Interval Int) Source #

within :: ComparativePredicateOf (Interval Int) Source #

enclose :: ComparativePredicateOf (Interval Int) Source #

enclosedBy :: ComparativePredicateOf (Interval Int) Source #

IntervalAlgebraic Interval Integer Source # 
Instance details

Defined in IntervalAlgebra

Methods

relate :: Interval Integer -> Interval Integer -> IntervalRelation (Interval Integer) Source #

predicate' :: IntervalRelation (Interval Integer) -> ComparativePredicateOf (Interval Integer) Source #

predicates :: Set (IntervalRelation (Interval Integer)) -> [ComparativePredicateOf (Interval Integer)] Source #

predicate :: Set (IntervalRelation (Interval Integer)) -> ComparativePredicateOf (Interval Integer) Source #

toSet :: [IntervalRelation (Interval Integer)] -> Set (IntervalRelation (Interval Integer)) Source #

compose :: IntervalRelation (Interval Integer) -> IntervalRelation (Interval Integer) -> Set (IntervalRelation (Interval Integer)) Source #

complement :: Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) Source #

intersection :: Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) Source #

union :: Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) Source #

converse :: Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) Source #

equals :: ComparativePredicateOf (Interval Integer) Source #

meets :: ComparativePredicateOf (Interval Integer) Source #

metBy :: ComparativePredicateOf (Interval Integer) Source #

before :: ComparativePredicateOf (Interval Integer) Source #

after :: ComparativePredicateOf (Interval Integer) Source #

overlaps :: ComparativePredicateOf (Interval Integer) Source #

overlappedBy :: ComparativePredicateOf (Interval Integer) Source #

starts :: ComparativePredicateOf (Interval Integer) Source #

startedBy :: ComparativePredicateOf (Interval Integer) Source #

precedes :: ComparativePredicateOf (Interval Integer) Source #

precededBy :: ComparativePredicateOf (Interval Integer) Source #

finishes :: ComparativePredicateOf (Interval Integer) Source #

finishedBy :: ComparativePredicateOf (Interval Integer) Source #

during :: ComparativePredicateOf (Interval Integer) Source #

contains :: ComparativePredicateOf (Interval Integer) Source #

unionPredicates :: [ComparativePredicateOf (Interval Integer)] -> ComparativePredicateOf (Interval Integer) Source #

(<|>) :: ComparativePredicateOf (Interval Integer) -> ComparativePredicateOf (Interval Integer) -> ComparativePredicateOf (Interval Integer) Source #

disjointRelations :: Set (IntervalRelation (Interval Integer)) Source #

withinRelations :: Set (IntervalRelation (Interval Integer)) Source #

disjoint :: ComparativePredicateOf (Interval Integer) Source #

notDisjoint :: ComparativePredicateOf (Interval Integer) Source #

concur :: ComparativePredicateOf (Interval Integer) Source #

within :: ComparativePredicateOf (Interval Integer) Source #

enclose :: ComparativePredicateOf (Interval Integer) Source #

enclosedBy :: ComparativePredicateOf (Interval Integer) Source #

IntervalAlgebraic Interval Day Source # 
Instance details

Defined in IntervalAlgebra

Methods

relate :: Interval Day -> Interval Day -> IntervalRelation (Interval Day) Source #

predicate' :: IntervalRelation (Interval Day) -> ComparativePredicateOf (Interval Day) Source #

predicates :: Set (IntervalRelation (Interval Day)) -> [ComparativePredicateOf (Interval Day)] Source #

predicate :: Set (IntervalRelation (Interval Day)) -> ComparativePredicateOf (Interval Day) Source #

toSet :: [IntervalRelation (Interval Day)] -> Set (IntervalRelation (Interval Day)) Source #

compose :: IntervalRelation (Interval Day) -> IntervalRelation (Interval Day) -> Set (IntervalRelation (Interval Day)) Source #

complement :: Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) Source #

intersection :: Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) Source #

union :: Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) Source #

converse :: Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) Source #

equals :: ComparativePredicateOf (Interval Day) Source #

meets :: ComparativePredicateOf (Interval Day) Source #

metBy :: ComparativePredicateOf (Interval Day) Source #

before :: ComparativePredicateOf (Interval Day) Source #

after :: ComparativePredicateOf (Interval Day) Source #

overlaps :: ComparativePredicateOf (Interval Day) Source #

overlappedBy :: ComparativePredicateOf (Interval Day) Source #

starts :: ComparativePredicateOf (Interval Day) Source #

startedBy :: ComparativePredicateOf (Interval Day) Source #

precedes :: ComparativePredicateOf (Interval Day) Source #

precededBy :: ComparativePredicateOf (Interval Day) Source #

finishes :: ComparativePredicateOf (Interval Day) Source #

finishedBy :: ComparativePredicateOf (Interval Day) Source #

during :: ComparativePredicateOf (Interval Day) Source #

contains :: ComparativePredicateOf (Interval Day) Source #

unionPredicates :: [ComparativePredicateOf (Interval Day)] -> ComparativePredicateOf (Interval Day) Source #

(<|>) :: ComparativePredicateOf (Interval Day) -> ComparativePredicateOf (Interval Day) -> ComparativePredicateOf (Interval Day) Source #

disjointRelations :: Set (IntervalRelation (Interval Day)) Source #

withinRelations :: Set (IntervalRelation (Interval Day)) Source #

disjoint :: ComparativePredicateOf (Interval Day) Source #

notDisjoint :: ComparativePredicateOf (Interval Day) Source #

concur :: ComparativePredicateOf (Interval Day) Source #

within :: ComparativePredicateOf (Interval Day) Source #

enclose :: ComparativePredicateOf (Interval Day) Source #

enclosedBy :: ComparativePredicateOf (Interval Day) Source #

Eq b => IntervalAlgebraic (PairedInterval b) Int Source # 
Instance details

Defined in IntervalAlgebra.PairedInterval

Methods

relate :: PairedInterval b Int -> PairedInterval b Int -> IntervalRelation (PairedInterval b Int) Source #

predicate' :: IntervalRelation (PairedInterval b Int) -> ComparativePredicateOf (PairedInterval b Int) Source #

predicates :: Set (IntervalRelation (PairedInterval b Int)) -> [ComparativePredicateOf (PairedInterval b Int)] Source #

predicate :: Set (IntervalRelation (PairedInterval b Int)) -> ComparativePredicateOf (PairedInterval b Int) Source #

toSet :: [IntervalRelation (PairedInterval b Int)] -> Set (IntervalRelation (PairedInterval b Int)) Source #

compose :: IntervalRelation (PairedInterval b Int) -> IntervalRelation (PairedInterval b Int) -> Set (IntervalRelation (PairedInterval b Int)) Source #

complement :: Set (IntervalRelation (PairedInterval b Int)) -> Set (IntervalRelation (PairedInterval b Int)) Source #

intersection :: Set (IntervalRelation (PairedInterval b Int)) -> Set (IntervalRelation (PairedInterval b Int)) -> Set (IntervalRelation (PairedInterval b Int)) Source #

union :: Set (IntervalRelation (PairedInterval b Int)) -> Set (IntervalRelation (PairedInterval b Int)) -> Set (IntervalRelation (PairedInterval b Int)) Source #

converse :: Set (IntervalRelation (PairedInterval b Int)) -> Set (IntervalRelation (PairedInterval b Int)) Source #

equals :: ComparativePredicateOf (PairedInterval b Int) Source #

meets :: ComparativePredicateOf (PairedInterval b Int) Source #

metBy :: ComparativePredicateOf (PairedInterval b Int) Source #

before :: ComparativePredicateOf (PairedInterval b Int) Source #

after :: ComparativePredicateOf (PairedInterval b Int) Source #

overlaps :: ComparativePredicateOf (PairedInterval b Int) Source #

overlappedBy :: ComparativePredicateOf (PairedInterval b Int) Source #

starts :: ComparativePredicateOf (PairedInterval b Int) Source #

startedBy :: ComparativePredicateOf (PairedInterval b Int) Source #

precedes :: ComparativePredicateOf (PairedInterval b Int) Source #

precededBy :: ComparativePredicateOf (PairedInterval b Int) Source #

finishes :: ComparativePredicateOf (PairedInterval b Int) Source #

finishedBy :: ComparativePredicateOf (PairedInterval b Int) Source #

during :: ComparativePredicateOf (PairedInterval b Int) Source #

contains :: ComparativePredicateOf (PairedInterval b Int) Source #

unionPredicates :: [ComparativePredicateOf (PairedInterval b Int)] -> ComparativePredicateOf (PairedInterval b Int) Source #

(<|>) :: ComparativePredicateOf (PairedInterval b Int) -> ComparativePredicateOf (PairedInterval b Int) -> ComparativePredicateOf (PairedInterval b Int) Source #

disjointRelations :: Set (IntervalRelation (PairedInterval b Int)) Source #

withinRelations :: Set (IntervalRelation (PairedInterval b Int)) Source #

disjoint :: ComparativePredicateOf (PairedInterval b Int) Source #

notDisjoint :: ComparativePredicateOf (PairedInterval b Int) Source #

concur :: ComparativePredicateOf (PairedInterval b Int) Source #

within :: ComparativePredicateOf (PairedInterval b Int) Source #

enclose :: ComparativePredicateOf (PairedInterval b Int) Source #

enclosedBy :: ComparativePredicateOf (PairedInterval b Int) Source #

class (IntervalAlgebraic Interval a, Show a) => IntervalCombinable a where Source #

The IntervalCombinable typeclass provides methods for (possibly) combining two Intervals.

Minimal complete definition

Nothing

Methods

(.+.) :: Interval a -> Interval a -> Maybe (Interval a) Source #

Maybe form a new Interval by the union of two Intervals that meets.

(><) :: Interval a -> Interval a -> Maybe (Interval a) Source #

If x is before y, then form a new Just Interval a from the interval in the "gap" between x and y from the end of x to the begin of y. Otherwise, Nothing.

(<+>) :: (Semigroup (f (Interval a)), Applicative f) => Interval a -> Interval a -> f (Interval a) Source #

If x is before y, return f x appended to f y. Otherwise, return extenterval of x and y (wrapped in f). This is useful for (left) folding over an *ordered* container of Intervals and combining intervals when x is *not* before y.

intersect :: Interval a -> Interval a -> Maybe (Interval a) Source #

Forms a Just new interval from the intersection of two intervals, provided the intervals are not disjoint.

class (Show a, Ord a, Num b, Ord b) => IntervalSizeable a b | a -> b where Source #

The IntervalSizeable typeclass provides functions to determine the size of an Intervallic type and to resize an 'Interval a'.

Minimal complete definition

add, diff

Methods

moment :: b Source #

The smallest duration for an 'Interval a'.

moment' :: Intervallic i a => i a -> b Source #

Gives back a moment based on the input's type.

duration :: Intervallic i a => i a -> b Source #

Determine the duration of an 'i a'.

add :: b -> a -> a Source #

Shifts an a. Most often, the b will be the same type as a. But for example, if a is Day then b could be Int.

diff :: a -> a -> b Source #

Takes the difference between two a to return a b.

Types

data Interval a Source #

An Interval a is a pair of as \( (x, y) \text{ where } x < y\). The Intervallic class provides a safe parseInterval function that returns a Left error if \(y < x\) and unsafeInterval as constructor for creating an interval that may not be valid.

Instances

Instances details
IntervalAlgebraic Interval Int Source # 
Instance details

Defined in IntervalAlgebra

Methods

relate :: Interval Int -> Interval Int -> IntervalRelation (Interval Int) Source #

predicate' :: IntervalRelation (Interval Int) -> ComparativePredicateOf (Interval Int) Source #

predicates :: Set (IntervalRelation (Interval Int)) -> [ComparativePredicateOf (Interval Int)] Source #

predicate :: Set (IntervalRelation (Interval Int)) -> ComparativePredicateOf (Interval Int) Source #

toSet :: [IntervalRelation (Interval Int)] -> Set (IntervalRelation (Interval Int)) Source #

compose :: IntervalRelation (Interval Int) -> IntervalRelation (Interval Int) -> Set (IntervalRelation (Interval Int)) Source #

complement :: Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) Source #

intersection :: Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) Source #

union :: Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) Source #

converse :: Set (IntervalRelation (Interval Int)) -> Set (IntervalRelation (Interval Int)) Source #

equals :: ComparativePredicateOf (Interval Int) Source #

meets :: ComparativePredicateOf (Interval Int) Source #

metBy :: ComparativePredicateOf (Interval Int) Source #

before :: ComparativePredicateOf (Interval Int) Source #

after :: ComparativePredicateOf (Interval Int) Source #

overlaps :: ComparativePredicateOf (Interval Int) Source #

overlappedBy :: ComparativePredicateOf (Interval Int) Source #

starts :: ComparativePredicateOf (Interval Int) Source #

startedBy :: ComparativePredicateOf (Interval Int) Source #

precedes :: ComparativePredicateOf (Interval Int) Source #

precededBy :: ComparativePredicateOf (Interval Int) Source #

finishes :: ComparativePredicateOf (Interval Int) Source #

finishedBy :: ComparativePredicateOf (Interval Int) Source #

during :: ComparativePredicateOf (Interval Int) Source #

contains :: ComparativePredicateOf (Interval Int) Source #

unionPredicates :: [ComparativePredicateOf (Interval Int)] -> ComparativePredicateOf (Interval Int) Source #

(<|>) :: ComparativePredicateOf (Interval Int) -> ComparativePredicateOf (Interval Int) -> ComparativePredicateOf (Interval Int) Source #

disjointRelations :: Set (IntervalRelation (Interval Int)) Source #

withinRelations :: Set (IntervalRelation (Interval Int)) Source #

disjoint :: ComparativePredicateOf (Interval Int) Source #

notDisjoint :: ComparativePredicateOf (Interval Int) Source #

concur :: ComparativePredicateOf (Interval Int) Source #

within :: ComparativePredicateOf (Interval Int) Source #

enclose :: ComparativePredicateOf (Interval Int) Source #

enclosedBy :: ComparativePredicateOf (Interval Int) Source #

IntervalAlgebraic Interval Integer Source # 
Instance details

Defined in IntervalAlgebra

Methods

relate :: Interval Integer -> Interval Integer -> IntervalRelation (Interval Integer) Source #

predicate' :: IntervalRelation (Interval Integer) -> ComparativePredicateOf (Interval Integer) Source #

predicates :: Set (IntervalRelation (Interval Integer)) -> [ComparativePredicateOf (Interval Integer)] Source #

predicate :: Set (IntervalRelation (Interval Integer)) -> ComparativePredicateOf (Interval Integer) Source #

toSet :: [IntervalRelation (Interval Integer)] -> Set (IntervalRelation (Interval Integer)) Source #

compose :: IntervalRelation (Interval Integer) -> IntervalRelation (Interval Integer) -> Set (IntervalRelation (Interval Integer)) Source #

complement :: Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) Source #

intersection :: Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) Source #

union :: Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) Source #

converse :: Set (IntervalRelation (Interval Integer)) -> Set (IntervalRelation (Interval Integer)) Source #

equals :: ComparativePredicateOf (Interval Integer) Source #

meets :: ComparativePredicateOf (Interval Integer) Source #

metBy :: ComparativePredicateOf (Interval Integer) Source #

before :: ComparativePredicateOf (Interval Integer) Source #

after :: ComparativePredicateOf (Interval Integer) Source #

overlaps :: ComparativePredicateOf (Interval Integer) Source #

overlappedBy :: ComparativePredicateOf (Interval Integer) Source #

starts :: ComparativePredicateOf (Interval Integer) Source #

startedBy :: ComparativePredicateOf (Interval Integer) Source #

precedes :: ComparativePredicateOf (Interval Integer) Source #

precededBy :: ComparativePredicateOf (Interval Integer) Source #

finishes :: ComparativePredicateOf (Interval Integer) Source #

finishedBy :: ComparativePredicateOf (Interval Integer) Source #

during :: ComparativePredicateOf (Interval Integer) Source #

contains :: ComparativePredicateOf (Interval Integer) Source #

unionPredicates :: [ComparativePredicateOf (Interval Integer)] -> ComparativePredicateOf (Interval Integer) Source #

(<|>) :: ComparativePredicateOf (Interval Integer) -> ComparativePredicateOf (Interval Integer) -> ComparativePredicateOf (Interval Integer) Source #

disjointRelations :: Set (IntervalRelation (Interval Integer)) Source #

withinRelations :: Set (IntervalRelation (Interval Integer)) Source #

disjoint :: ComparativePredicateOf (Interval Integer) Source #

notDisjoint :: ComparativePredicateOf (Interval Integer) Source #

concur :: ComparativePredicateOf (Interval Integer) Source #

within :: ComparativePredicateOf (Interval Integer) Source #

enclose :: ComparativePredicateOf (Interval Integer) Source #

enclosedBy :: ComparativePredicateOf (Interval Integer) Source #

IntervalAlgebraic Interval Day Source # 
Instance details

Defined in IntervalAlgebra

Methods

relate :: Interval Day -> Interval Day -> IntervalRelation (Interval Day) Source #

predicate' :: IntervalRelation (Interval Day) -> ComparativePredicateOf (Interval Day) Source #

predicates :: Set (IntervalRelation (Interval Day)) -> [ComparativePredicateOf (Interval Day)] Source #

predicate :: Set (IntervalRelation (Interval Day)) -> ComparativePredicateOf (Interval Day) Source #

toSet :: [IntervalRelation (Interval Day)] -> Set (IntervalRelation (Interval Day)) Source #

compose :: IntervalRelation (Interval Day) -> IntervalRelation (Interval Day) -> Set (IntervalRelation (Interval Day)) Source #

complement :: Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) Source #

intersection :: Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) Source #

union :: Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) Source #

converse :: Set (IntervalRelation (Interval Day)) -> Set (IntervalRelation (Interval Day)) Source #

equals :: ComparativePredicateOf (Interval Day) Source #

meets :: ComparativePredicateOf (Interval Day) Source #

metBy :: ComparativePredicateOf (Interval Day) Source #

before :: ComparativePredicateOf (Interval Day) Source #

after :: ComparativePredicateOf (Interval Day) Source #

overlaps :: ComparativePredicateOf (Interval Day) Source #

overlappedBy :: ComparativePredicateOf (Interval Day) Source #

starts :: ComparativePredicateOf (Interval Day) Source #

startedBy :: ComparativePredicateOf (Interval Day) Source #

precedes :: ComparativePredicateOf (Interval Day) Source #

precededBy :: ComparativePredicateOf (Interval Day) Source #

finishes :: ComparativePredicateOf (Interval Day) Source #

finishedBy :: ComparativePredicateOf (Interval Day) Source #

during :: ComparativePredicateOf (Interval Day) Source #

contains :: ComparativePredicateOf (Interval Day) Source #

unionPredicates :: [ComparativePredicateOf (Interval Day)] -> ComparativePredicateOf (Interval Day) Source #

(<|>) :: ComparativePredicateOf (Interval Day) -> ComparativePredicateOf (Interval Day) -> ComparativePredicateOf (Interval Day) Source #

disjointRelations :: Set (IntervalRelation (Interval Day)) Source #

withinRelations :: Set (IntervalRelation (Interval Day)) Source #

disjoint :: ComparativePredicateOf (Interval Day) Source #

notDisjoint :: ComparativePredicateOf (Interval Day) Source #

concur :: ComparativePredicateOf (Interval Day) Source #

within :: ComparativePredicateOf (Interval Day) Source #

enclose :: ComparativePredicateOf (Interval Day) Source #

enclosedBy :: ComparativePredicateOf (Interval Day) Source #

(Ord a, Show a) => Intervallic Interval a Source # 
Instance details

Defined in IntervalAlgebra

Eq a => Eq (Interval a) Source # 
Instance details

Defined in IntervalAlgebra

Methods

(==) :: Interval a -> Interval a -> Bool #

(/=) :: Interval a -> Interval a -> Bool #

(Eq (Interval a), Intervallic Interval a) => Ord (Interval a) Source #

Imposes a total ordering on Interval a based on first ordering the begins then the ends.

Instance details

Defined in IntervalAlgebra

Methods

compare :: Interval a -> Interval a -> Ordering #

(<) :: Interval a -> Interval a -> Bool #

(<=) :: Interval a -> Interval a -> Bool #

(>) :: Interval a -> Interval a -> Bool #

(>=) :: Interval a -> Interval a -> Bool #

max :: Interval a -> Interval a -> Interval a #

min :: Interval a -> Interval a -> Interval a #

(Intervallic Interval a, Show a) => Show (Interval a) Source # 
Instance details

Defined in IntervalAlgebra

Methods

showsPrec :: Int -> Interval a -> ShowS #

show :: Interval a -> String #

showList :: [Interval a] -> ShowS #

Arbitrary (Interval Int) Source # 
Instance details

Defined in IntervalAlgebra.Arbitrary

Arbitrary (Interval Day) Source # 
Instance details

Defined in IntervalAlgebra.Arbitrary

parseInterval :: (Show a, Ord a) => a -> a -> Either String (Interval a) Source #

Safely parse a pair of as to create an Interval a.

unsafeInterval :: a -> a -> Interval a Source #

Create a new Interval a. This function is not safe as it does not enforce that \(x < y\). Use with caution. It is meant to be helper function in early prototyping of this package. This function may be deprecated in future releases.

data IntervalRelation a Source #

The IntervalRelation type enumerates the thirteen possible ways that two Interval a objects can relate according to the interval algebra.

Meets, Metby

x `meets` y
y `metBy` x
x: |-----|
y:       |-----| 

Before, After

x `before` y
y `after` x
x: |-----|  
y:          |-----|

Overlaps, OverlappedBy

x `overlaps` y
y `overlappedBy` x
x: |-----|
y:     |-----|

Starts, StartedBy

x `starts` y
y `startedBy` x
x: |---| 
y: |-----|

Finishes, FinishedBy

x `finishes` y
y `finishedBy` x
x:   |---| 
y: |-----|

During, Contains

x `during` y
y `contains` x
x:   |-| 
y: |-----|

Equal

x `equal` y
y `equal` x
x: |-----| 
y: |-----|

Instances

Instances details
Bounded (IntervalRelation a) Source # 
Instance details

Defined in IntervalAlgebra

Enum (IntervalRelation a) Source # 
Instance details

Defined in IntervalAlgebra

Eq (IntervalRelation a) Source # 
Instance details

Defined in IntervalAlgebra

Ord (IntervalRelation a) Source # 
Instance details

Defined in IntervalAlgebra

Read (IntervalRelation a) Source # 
Instance details

Defined in IntervalAlgebra

Show (IntervalRelation a) Source # 
Instance details

Defined in IntervalAlgebra

type ComparativePredicateOf a = a -> a -> Bool Source #

Defines a predicate of two objects of type a.

Functions for creating new intervals from existing

expand :: (IntervalSizeable a b, Intervallic i a) => b -> b -> i a -> i a Source #

Resize an 'i a' to by expanding to "left" by l and to the "right" by r. In the case that l or r are less than a moment the respective endpoints are unchanged.

expandl :: (IntervalSizeable a b, Intervallic i a) => b -> i a -> i a Source #

Expands an 'i a' to left by i.

expandr :: (IntervalSizeable a b, Intervallic i a) => b -> i a -> i a Source #

Expands an 'i a' to right by i.

beginerval :: IntervalSizeable a b => b -> a -> Interval a Source #

Safely creates an 'Interval a' using x as the begin and adding max moment dur to x as the end.

enderval :: IntervalSizeable a b => b -> a -> Interval a Source #

Safely creates an 'Interval a' using x as the end and adding negate max moment dur to x as the begin.

extenterval :: IntervalAlgebraic i a => i a -> i a -> Interval a Source #

Creates a new Interval spanning the extent x and y.