posable: A product-of-sums generics library

[ bsd3, generics, library ] [ Propose Tags ]

A generics library that represents a non-recursive Haskell 98 datatype as a product-of-sums. Each type is represented with a single tag, and a product of sums of fields. The tag represents all constructor choices in the type, the fields contain all the values in the type. This representation maps easily to a struct of unions, which is a memory-efficient way to store sum datatypes.


[Skip to Readme]

Downloads

Note: This package has metadata revisions in the cabal description newer than included in the tarball. To unpack the package including the revisions, use 'cabal get'.

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees

Candidates

Versions [RSS] 1.0.0.0, 1.0.0.1
Change log CHANGELOG.md
Dependencies base (>=4.15.0 && <4.16), finite-typelits (>=0.1.4 && <0.2), generics-sop (>=0.5.1 && <0.6), ghc-typelits-knownnat (>=0.7.6 && <0.8), template-haskell (>=2.17.0 && <2.18) [details]
License BSD-3-Clause
Author Rick van Hoef
Maintainer Rick van Hoef <hackage@rickvanhoef.nl>
Revised Revision 1 made by riscky at 2022-06-14T14:02:09Z
Category Generics
Home page https://github.com/Riscky/posable
Bug tracker https://github.com/Riscky/posable/issues
Source repo head: git clone https://github.com/Riscky/posable
Uploaded by riscky at 2022-06-08T09:31:33Z
Distributions
Downloads 113 total (5 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs uploaded by user [build log]
All reported builds failed as of 2022-06-08 [all 2 reports]

Readme for posable-1.0.0.0

[back to package description]

POSable

A library to convert non-recursive Haskell-98 datatypes to a Product-of-Sums representation - and back. This makes it possible to compactly store arrays of (nested) sum types in a struct-of-arrays representation, which is used in array-based languages like Accelerate.

Dependencies

  • The Stack package manager (Tested with stack 2.7.3)
  • stylish-haskell and hlint (for linting only)

Tests and lints

stylish-haskell -r src examples test
hlint src examples test
stack test

Building

stack build
# To build the docs
stack haddock posable

Examples

In the examples folder you will find examples that describe how to use this library.