packages feed

allen-0.1.0.0: README.md

# 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](https://cse.unl.edu/~choueiry/Documents/Allen-CACM1983.pdf), 
and [Allen's Interval Algebra](https://www.ics.uci.edu/~alspaugh/cls/shr/allen.html).

## 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:

```haskell 
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](https://archaversine.github.io/allen/Data-Allen.html).

## Interactive REPL

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

You can download the interactive version here: 

- [Linux](https://github.com/Archaversine/allen/releases/tag/v1.0.1-linux)
- [Windows](https://github.com/Archaversine/allen/releases/tag/v1.0.1-windows)