github action: CI github action: hackage


generalized Algebraic Dynamic Programming Homepage

PrimitiveArray provides operations on multi-dimensional arrays. Internally, the representation is based on the vector library, while the multi-dimensional indexing follows repa.

Primitive arrays are designed to be used together with ADPfusion.


Christian Hoener zu Siederdissen
Leipzig University, Leipzig, Germany
[email protected]


  • version bump on DPutils

  • introduction of @Data.PrimitiveArray.Sparse@ which uses different sparsification options. The default is @D.P.S.Search@ based on binary search.
  • All array operations, pure or mutable are now based on a single, unified class. Mostly because mutable operations go via a data family anyway.

  • Rewrote Data.PrimitiveArray.Dense to accept all vector types using one interface. This is a breaking change, since @Unboxed@ becomes @Dense Data.Vector.Unboxed.Vector@, but now @Dense v@ accepts any @v@ as underlying storage vector. Breaking occurs only at user sites where the actual vector type needs to be specified. This tends to be very localized.

  • OrderedBits version bump

  • Arbitrary instance(s), field lenses that are probably not a good idea (don’t use them!)

  • large-scale changes
  • associated data families for bounds

  • inclusion of Upperlimit data family to simplify declaration of upper limits

  • PointL delays inlining to phase 0 for table filling. This is part of the close-to-C optimization effort for linear languages.
  • disabling smallcheck until I fix how things are generated

  • renamed Interface (Iter) to Boundary (Boundary)
  • Typeable instances for Dense primitive arrays
  • EdgeBoundary index structure
  • changes and fixes to quickcheck/smallcheck
  • added ScoreMatrix module with simple score and distance matrix structure (requires log-domain)

  • JSONKey (To/From) for index types.

  • minor updates to dependencies
  • tasty framework
  • Subword/upper triangular indexing provided by DPutils

  • Data.PrimitiveArray.Checked to capture index out-of-bounds problems

  • vector <= 0.11 support; including compatibility layer
  • redesigned Index structures (for dealing with Inside/Outside/Complement)

  • Hashable instances for all index structures
  • Hashable instances for Unboxed and Boxed arrays. These require Hashable instances for vectors, which are not available by default

  • OrderedBits < 0.0.1
  • travis.yml update

  • moved primitive array classes to Data.PrimitiveArray.Class
  • added from / to lenses
  • Field1 .. Field6 lenses for indices (Z:.a:.b…) (with Z being Field0)
    • lens stuff currently commented out; aiming to have an extra package [lens is fairly heavy]
  • FillTables should work now (with PointL, Subword)
  • freezing of whole stacks of (Z:.mutarr:.mutarr:. …) tables
  • explicit ‘Shape Subword’; this allows for simpler code in a number of places and is especially useful for CYK-style algorithms that have a single-dimensional upper-triangular matrix.
  • rangeStream of Extshape is new and used by the FillTables module
  • Binary, Cereal, Aeson instances for indices and immutable tables
  • orphan instances of Binary, Cereal, Aeson for Z, and (:.)
  • topmostIndex returns the final index position for CYK-style (bottom to top) parsing
  • removed Data.Array.Repa.Index.Point (we have PointL, PointR in Points.hs)
  • added Data.Array.Repa.Index.Set (for sets with an interface, used by Hamiltonian path problems)
  • Data.Array.Repa.Index.Outside is now just a newtype wrapped around other Index types. We want to be able to say “a Subword, but for Outside algorithms”
  • travis-ci integration

  • actually implemented PointR

  • added the rather important strictness annotation for mutable arrays in .Zero

  • fixed vector-th-unbox problem