named-sop: Dependently-typed sums and products, tagged by field name

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]

Sums and Maps (products) indexed by a typelevel map of their field (or constructor) names and types. They can be combined and split again; their typelevel map is sorted to ensure that the end result is independent of the order you combine it in.

Data.NamedSOP.Generic contains functions for automatically converting between types with a Generic instance and named sums of products:

>>> data A = C { a :: Int, b :: Bool }
>>>          | D Int Bool deriving (Generic)
>>> :t genSum (C 3 True)
NSum
 '[ "_C" ':-> NMap '[ "a" ':-> Int, "b" ':-> Bool],
    "_D" ':-> NMap '[ "_1" ':-> Int, "_2" ':-> Bool]]

[Skip to Readme]

Properties

Versions 0.1.0.0, 0.1.0.0, 0.1.0.1, 0.2.0.0, 0.3.0.0
Change log CHANGELOG.md
Dependencies base (>=4.12.0.0 && <4.13), singletons (>=2.5.1 && <2.6), text (>=1.2.3.1 && <1.3) [details]
License MIT
Author Sam Schweigel
Maintainer Sam Schweigel <s.schweigel@gmail.com>
Category Data
Home page https://github.com/sjsch/named-sop
Source repo head: git clone https://github.com/sjsch/named-sop
Uploaded by sjsch at 2019-07-12T04:52:59Z

Modules

[Index]

Downloads

Maintainer's Corner

For package maintainers and hackage trustees


Readme for named-sop-0.1.0.0

[back to package description]

named-sop: Dependently-typed sums and products, tagged by field name

Hackage Build Status

Sums and Maps (products) indexed by a typelevel map of their field (or constructor) names and types. They can be combined and split again; their typelevel map is sorted to ensure that the end result is independent of the order you combine it in.

"Data.NamedSOP.Generic" contains functions for automatically converting between types with a Generic instance and named sums of products:

>>> data A = C { a :: Int, b :: Bool } 
>>>          | D Int Bool deriving (Generic)
>>> :t genSum (C 3 True)
NSum
 '[ "_C" ':-> NMap '[ "a" ':-> Int, "b" ':-> Bool],
    "_D" ':-> NMap '[ "_1" ':-> Int, "_2" ':-> Bool]]