@hackage shapely-data0.1

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 (,)Either as a lingua franca/ generic representation that other library writers can use without dependencies, encouraging abstractions in terms of products and sums

  • Support 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

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 cryptic

  • TH 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.