Copyright | Copyright (c) 2009-2017 David Sorokin <david.sorokin@gmail.com> |
---|---|

License | BSD3 |

Maintainer | David Sorokin <david.sorokin@gmail.com> |

Stability | experimental |

Safe Haskell | Safe |

Language | Haskell2010 |

Tested with: GHC 8.0.1

An imperative heap-based priority queue.

## Synopsis

- data PriorityQueue a
- queueNull :: PriorityQueue a -> IO Bool
- queueCount :: PriorityQueue a -> IO Int
- newQueue :: IO (PriorityQueue a)
- enqueue :: PriorityQueue a -> Double -> a -> IO ()
- dequeue :: PriorityQueue a -> IO ()
- queueFront :: PriorityQueue a -> IO (Double, a)
- queueDelete :: Eq a => PriorityQueue a -> a -> IO Bool
- queueDeleteBy :: PriorityQueue a -> (a -> Bool) -> IO (Maybe a)
- queueContains :: Eq a => PriorityQueue a -> a -> IO Bool
- queueContainsBy :: PriorityQueue a -> (a -> Bool) -> IO (Maybe a)
- remove :: Eq a => PriorityQueue a -> a -> IO Bool
- removeBy :: PriorityQueue a -> (a -> Bool) -> IO Bool

# Documentation

data PriorityQueue a Source #

The `PriorityQueue`

type represents an imperative heap-based
priority queue.

queueCount :: PriorityQueue a -> IO Int Source #

Return the number of elements in the priority queue.

newQueue :: IO (PriorityQueue a) Source #

Create a new priority queue.

enqueue :: PriorityQueue a -> Double -> a -> IO () Source #

Enqueue a new element with the specified priority.

dequeue :: PriorityQueue a -> IO () Source #

Dequeue the element with the minimal priority.

queueFront :: PriorityQueue a -> IO (Double, a) Source #

Return the element with the minimal priority.

queueDelete :: Eq a => PriorityQueue a -> a -> IO Bool Source #

Remove the specified element from the queue and return a computation of the flag indicating whether the element was actually removed.

Note that unlike other functions it has complexity O(n).

queueDeleteBy :: PriorityQueue a -> (a -> Bool) -> IO (Maybe a) Source #

Remove an element satisfying the predicate and return a computation of the element if found.

Note that unlike other functions it has complexity O(n).

queueContains :: Eq a => PriorityQueue a -> a -> IO Bool Source #

Detect whether the specified element is contained in the queue.

Note that unlike other functions it has complexity O(n).

queueContainsBy :: PriorityQueue a -> (a -> Bool) -> IO (Maybe a) Source #

Detect whether an element satisfying the predicate is contained in the queue.

Note that unlike other functions it has complexity O(n).

remove :: Eq a => PriorityQueue a -> a -> IO Bool Source #

Deprecated: Use queueDelete instead.

Use `queueDelete`

instead.

removeBy :: PriorityQueue a -> (a -> Bool) -> IO Bool Source #

Deprecated: Use queueDeleteBy instead.

Use `queueDeleteBy`

instead.