# allen: A monadic way of calculating relations between intervals of time.

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

Warnings:

• These packages miss upper bounds: - QuickCheck - containers - criterion - mtl - vector Please add them, using cabal gen-bounds for suggestions. For more information see: https://pvp.haskell.org/

## Properties

Versions 0.1.0.0, 0.1.0.0 CHANGELOG.md allen, base (>=4.7 && <5), containers, mtl, vector [details] BSD-3-Clause 2023 Adam Brohl Adam Brohl awbrohl@knox.edu Algebra https://github.com/archaversine/allen#readme https://github.com/archaversine/allen/issues head: git clone https://github.com/archaversine/allen by archaversine at 2023-08-11T14:53:58Z

## Modules

[Index] [Quick Jump]

#### Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

[back to package description]

# Haskell - Allen's Interval Algebra Implementation

An Implementation of Allen's Interval Algebra in Haskell.

This library provides a monadic way to perform computations related to Allen's interval algebra. The interval network strucutre is implicitly updated upon the creation of a new interval and when a set of relations is applied to two intervals.

## Sources

This library is based off of the interval algebra described in Maintaining Knowledge about Temporal Intervals, and Allen's Interval Algebra.

## Examples

Assume a situation with three intervals:

1. I am walking.
2. I am talking.
3. My friend calls me.

and assume that we know the following:

• When I am walking, I am not talking.
• When my friend called me, I started talking.

we can easily compute the relations between when I was walking and when my friend called me:

calc :: Allen [Relation]
calc = do
walking <- interval
talking <- interval
friend  <- interval

assumeSet walking [Precedes, Meets, MetBy, PrecededBy] talking
assume friend Starts talking

relations <- getConstraints walking friend

return (fromBits relations)

main :: IO ()
main = print \$ evalAllen calc


And this gives the result:

[Precedes,Meets,PrecededBy]


Which means that we can deduce that walking either happens before, directly before, or after my friend calls.

## Documentation

To view more information for library functions, you can view the documentation for this library here.

## Interactive REPL

You can use an interactive REPL to perform calculations from the command line. Executables are available for both Linux and Windows.