# shapely-data: Generics using @(,)@ and @Either@, with algebraic operations and typed conversions

`shapely-data`

is a library for working with algebraic datatypes in a
simple generic form made up of haskell's primitive product, sum and unit
types: `(,)`, `Either`

, and `()`, providing something like light-weight
Structural Typing.

The library was not designed to facilitate generic traversals or abstraction over different recursion schemes, but rather to (from most to least important)

Provide a good story for

`(,)`

lingua franca/ generic representation that other library writers can use without dependencies, encouraging abstractions in terms of products and sums`Either`

as aSupport algebraic operations on ADTs, making types composable

Support powerful, typed conversions between

`Shapely`

types

*Influences*

I've taken lots of inspiration, code, names, ideas, and type-level programming techniques from, in particular

Oleg Kiselyov's HList work

Edward Kmett's "categories" package

Chris Taylor's "Algebra of Algebraic Datatypes" series at http://chris-taylor.github.io/blog/2013/02/10/the-algebra-of-algebraic-data-types/

*Issues and Limitations:*

`massage`

does not support mutually-recursive types and other more complicated recursion schemes, nor type application.While all classes except

`Shapely`

are considered closed, we don't do any tricks to enforce that in the API yet.In fancier functions that use type equality (e.g.

`coerce`

), types need to be unambiguous so type signatures are sometimes required.type errors, especially in

`massage`

and`coerce`

, can be crypticTH deriving hasn't been considered for fancier types like GADTs, existential types, etc. some of which may have sensible Shapely instances

Performance hasn't been tested at all yet.

[Skip to Readme]

Versions [faq] | 0.0, 0.1 |
---|---|

Dependencies | base (<5), proxy-kindness (==0.1), tagged, template-haskell (==2.*) [details] |

License | BSD-3-Clause |

Author | Brandon Simmons |

Maintainer | brandon.m.simmons@gmail.com |

Category | Data, Generics |

Home page | http://github.com/jberryman/shapely-data |

Source repo | head: git clone https://github.com/jberryman/shapely-data.git -b master |

Uploaded | by BrandonSimmons at Sun Dec 22 23:32:01 UTC 2013 |

Distributions | NixOS:0.1 |

Downloads | 1084 total (37 in the last 30 days) |

Rating | (no votes yet) [estimated by rule of succession] |

Your Rating | |

Status | Docs available [build log] Successful builds reported [all 1 reports] |

## Downloads

- shapely-data-0.1.tar.gz [browse] (Cabal source package)
- Package description (as included in the package)