posable: A product-of-sums generics library

This is a package candidate release! Here you can preview how this package release will appear once published to the main package index (which can be accomplished via the 'maintain' link below). Please note that once a package has been published to the main package index it cannot be undone! Please consult the package uploading documentation for more information.

[maintain] [Publish]

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]

Properties

Versions 1.0.0.0, 1.0.0.0, 1.0.0.1
Change log CHANGELOG.md
Dependencies base (>=4.12.0 && <4.16), finite-typelits (>=0.1.4 && <0.2), generics-sop (>=0.4.0 && <0.6), ghc-typelits-knownnat (>=0.6 && <0.8), template-haskell (>=2.14.0 && <2.18) [details]
License BSD-3-Clause
Author Rick van Hoef
Maintainer Rick van Hoef <hackage@rickvanhoef.nl>
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-14T15:01:35Z

Modules

[Index] [Quick Jump]

Downloads

Maintainer's Corner

Package maintainers

For package maintainers and hackage trustees


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

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.