circular: Circular fixed-sized mutable vectors

[ bsd3, data-structures, library, math ] [ Propose Tags ]


[Index] [Quick Jump]


Maintainer's Corner

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS] 0.1.0, 0.1.1, 0.2.0, 0.3.0, 0.3.1,,,,,
Change log
Dependencies aeson, base (>=4.7 && <5), primitive, vector [details]
License BSD-3-Clause
Copyright 2021 Dominik Schrempf
Author Dominik Schrempf
Category Math, Data Structures
Home page
Bug tracker
Source repo head: git clone
Uploaded by dschrempf at 2022-07-10T08:35:13Z
Distributions LTSHaskell:, NixOS:, Stackage:
Downloads 1055 total (37 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2022-07-10 [all 1 reports]

Readme for circular-

[back to package description]


Circular stacks of fixed size.

Circular stacks are just normal vectors with a pointer to the last element.

Circular stacks may not be what you need because:

  • You need all values at a later time anyways.
  • You don't want a monadic work flow, because circular stacks use mutable vectors.

Circular stacks are useful to you because:

  • They have a fixed size and consequently have constant memory usage. Constant memory usage is important if values are gathered continuously but only a specific number of values is needed at a later time.
  • They are fast, especially when summary statistics need to be computed across the stack.

Elements pushed on a circular stack replace the oldest (deepest) elements on the stack. QuickCheck and unit tests with HSpec give promising results — have a look yourself.

I use circular stacks, for example, as the data type for traces of Markov chains. In this case, lists cannot be used reliably, because the space requirement increases linearly with the chain length.

Circular is actively developed and functions may be removed, renamed, or changed. Ideas are welcome!