{"id":22258079,"url":"https://github.com/coot/free-category","last_synced_at":"2025-07-28T07:32:06.474Z","repository":{"id":33278070,"uuid":"154056806","full_name":"coot/free-category","owner":"coot","description":"Free categories, free arrows and free categories with monadic actions","archived":false,"fork":false,"pushed_at":"2023-06-04T11:27:49.000Z","size":284,"stargazers_count":22,"open_issues_count":2,"forks_count":2,"subscribers_count":4,"default_branch":"master","last_synced_at":"2024-04-25T12:44:07.784Z","etag":null,"topics":["category","free","state-machine"],"latest_commit_sha":null,"homepage":"https://hackage.haskell.org/package/free-category","language":"Haskell","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mpl-2.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/coot.png","metadata":{"files":{"readme":"README.md","changelog":"ChangeLog.md","contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null}},"created_at":"2018-10-21T22:10:52.000Z","updated_at":"2023-09-27T18:59:20.000Z","dependencies_parsed_at":"2024-01-25T00:14:27.880Z","dependency_job_id":"977ab526-da84-4781-ae1e-687c4dbacc94","html_url":"https://github.com/coot/free-category","commit_stats":{"total_commits":171,"total_committers":5,"mean_commits":34.2,"dds":0.08771929824561409,"last_synced_commit":"2aac491edffc39cd0daf60b6658fbecd561b283b"},"previous_names":[],"tags_count":8,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coot%2Ffree-category","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coot%2Ffree-category/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coot%2Ffree-category/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/coot%2Ffree-category/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/coot","download_url":"https://codeload.github.com/coot/free-category/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":227877782,"owners_count":17833559,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["category","free","state-machine"],"created_at":"2024-12-03T08:13:24.950Z","updated_at":"2024-12-03T08:13:25.582Z","avatar_url":"https://github.com/coot.png","language":"Haskell","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Free Category\n[![Maintainer: coot](https://img.shields.io/badge/maintainer-coot-lightgrey.svg?style=for-the-badge)](http://github.com/coot)\n[![Haskell/CI](https://img.shields.io/github/actions/workflow/status/coot/free-category/ci.yaml?branch=master\u0026label=Build\u0026style=for-the-badge)](https://github.com/coot/free-category/actions)\n\nThis package contains efficient implementations of free categories. There are\nvarious representations available:\n\n* real-time queues (C. Okasaki 'Pure Functional Data Structures')\n* type aligned lists\n* continuation passing style (Church encoding)\n\nFree arrows and free Kleisli categories are also included.\n\nFree categories are useful to model state machines in a simple yet type safe\nmanner.  For that purpose `Kleisli` categories are a very useful target which\nallows to include monadic computations.  This package contains a useful\ngeneralisation of `Kleisli` categories captured by `EffectCategory` class\n(categories with effects), and a (free) transformer which lifts a category to\na category with effects.\n\n## Benchmarks\n\nCheck performance characteristics of various representations:\n\n* [report-O0](/bench/report-O0.md)\n* [report-O1](/bench/report-O1.md)\n* [report-O2](/bench/report-O2.md)\n\n## Resources\n* [LoginStateMachine](https://github.com/coot/free-category/blob/master/examples/src/LoginStateMachine.hs):\n  based on [State Machines All The Way\n  Down](https://www.youtube.com/watch?v=xq7ZuSRgCR4) by Edwin Bradly, 2017.\n  You can run it with `cabal new-run examples:login-state-machine`.\n* Read more [here](https://coot.me/posts/finite-state-machines.html) on\n  a simple example of a finite state machine encoded using a free category\n  using a simple GADT.\n* Another\n  [example](https://github.com/coot/free-algebras/blob/master/examples/src/Control/Category/Free.hs).\n* [Blog post](https://coot.me/posts/kleisli-categories-and-free-monads.html) on Kleisli categories.\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoot%2Ffree-category","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fcoot%2Ffree-category","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fcoot%2Ffree-category/lists"}