mirror of
https://github.com/coot/free-category.git
synced 2024-11-23 00:56:58 +03:00
Free categories, free arrows and free categories with monadic actions
d8c6f7f245
Added various GHC rewrite rules for `Queue` and `Cat` types: * `foldCat` * `foldQ` / `foldrQ` * `foldNatQ` * `hoistQ` |
||
---|---|---|
.circleci | ||
bench | ||
examples | ||
nix | ||
src/Control | ||
test | ||
.travis.yml | ||
bench-cats.hp | ||
bench-cats.prof | ||
bench-cats.svg | ||
cabal.project | ||
ChangeLog.md | ||
default.nix | ||
free-category.cabal | ||
LICENSE | ||
README.md | ||
shell.nix |
Free Category
This package contains efficient free categories. There are two presentations:
- using realtime queues (C. Okasaki 'Pure Functional Data Structures')
- using continuation passing style
Free arrows and free Kleisli categories are also included.
Free categories are useful to model state machines in a simple yet type safe
manner. For that purpose Kleisli
categroies are a very useful target which
allows to include monadic computations. This packge contains a useful
generalisation of Kliesli
categories captured by EffCategory
class
(effectful categories), and a (free) transformer which lifts a category to
an effectful one.
Benchmarks
Check performence characteristics of various presentations free categories:
Some examples
- LoginStateMachine:
based on State Machines All The Way
Down by Edwin Bradly, 2017 You
can run it with
cabal new-run examples:login-state-machine
. - Read more here on a simple example of a finite state machine encoded using a free category using a simple GADT.
- Another example.
- Blog post on Keleisli categories.