# elm-queue

A queue.

## An example

```elm
import Queue as Q

Q.isEmpty Q.empty == True

Q.toList (Q.enqueue 2 (Q.enqueue 1 Q.empty)) == [ 1, 2 ]

Q.peek (Q.fromList [ 1, 2 ]) == Just 1

Q.dequeue (Q.fromList [ 1, 2, 3 ]) == Just (1, Q.fromList [ 2, 3 ])

Q.toList (Q.fromList [ 1, 2, 3, 4 ]) == [ 1, 2, 3, 4 ]
```

## Public API

```elm
type Queue a

-- Construct

empty : Queue a
fromList : List a -> Queue a

-- Query

isEmpty : Queue a -> Bool
peek : Queue a -> Maybe a

-- Modify

enqueue : a -> Queue a -> Queue a
dequeue : Queue a -> Maybe ( a, Queue a )

-- Convert

toList : Queue a -> List a
```

## Resources

- [Functional Queues | OCaml Programming | Chapter 5 Video 7](https://www.youtube.com/watch?v=rCiBfZO67A4&list=PLre5AT9JnKShBOPeuiD9b-I4XROIJhkIU&index=59)
- [Real-time queue operations in pure LISP](https://github.com/dwayne/elm-queue/blob/6d4f528b1f8393e55bf61797abbdea5ed62f6bba/docs/Real-time%20queue%20operations%20in%20pure%20LISP.pdf)
