packages feed

recursion-schemes-ix-0.1.0.0: README.md

# recursion-schemes-ix

## Recursion schemes over indexed datatypes

Heavily inspired by `multirec`, this library uses `PolyKinds`
and `SingI` constraints to achieve the same dependent typing as `multirec`.

This library defines the `IFunctor` typeclass and recursion-schemes
on `IFunctor`s.

Goals:
* Minimal dependencies
  - This library depends only on `singlethongs`, which in turn only depends
    on `template-haskell`. As a result, it should be easy to include in
    any project
* GHCJS compatibility
  - This package is used in a compiler that I want to be able to run in the
    browser
* Ease of use
  - Once everything is set-up, writing a recursion-scheme should not be
    overly complex (looking at you, `mulrirec`)

Non-Goals:
* Eliminating boilerplate
  - This library requires hand-written `IShow`, `IRead`, `IEq`, `IOrd`, `ITraversable` instances.
    I also recommend writing pattern synonyms to remove the `IFix` constructor.
    Writing these can be a pain, but its only required once for the main data structure,
    and one `IFunctor` instance whenever you write a dependent recursion-scheme.
* Speed
  - The code in the library mimics the `recurion-schemes` library almost directly,
    simply lifting everything up from `*` to `k -> *`. In a future release,
    `INLINE` pragmas will be added and possibly benchmarked.

## Documentation

Not written, but haddocks on the github user site.