registry: data structure for assembling components

[ control, library, mit ] [ Propose Tags ]

This library provides a Registry which is a data structure containing a list of functions and values representing dependencies in a directed acyclic graph. A make function can then be used to create a value of a specific type out of the registry. You can start with the README for a full description of the library.

[Skip to Readme]


Maintainer's Corner

For package maintainers and hackage trustees


  • No Candidates
Versions [RSS],,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,,
Dependencies base (>=4.14 && <5), containers (>=0.5 && <0.7), exceptions (>=0.8 && <0.11), hashable (>=1.2 && <1.5), mmorph (>=1.0 && <2), mtl (>=2.0 && <3), protolude (>=0.2 && <0.4), resourcet (>=1.1 && <1.3), semigroupoids (>=5.0 && <5.4), semigroups (>=0.15 && <0.30), template-haskell (>=2.13 && <3.0), text (>=1.1 && <2), transformers-base (>=0.4 && <0.5) [details]
License MIT
Category Control
Source repo head: git clone
Uploaded by etorreborre at 2022-06-22T20:55:58Z
Distributions NixOS:
Downloads 19684 total (380 in the last 30 days)
Rating (no votes yet) [estimated by Bayesian average]
Your Rating
  • λ
  • λ
  • λ
Status Docs available [build log]
Last success reported on 2022-06-22 [all 1 reports]

Readme for registry-

[back to package description]

Registry Hackage Build Status

Join the chat at

It's functions all the way down


This library provides a data structure, a Registry, to control the creation of functions from other functions. You can use this technique to:

You can watch a video presenting the main ideas behind the library here.

The following sections introduce in more details the problem that this library is addressing, the concepts behind the solution and various use-cases which can arise on real projects:

  1. what is the problem?
  2. the concept of a Registry and the resolution algorithm
  3. how does this compare to monad transformers and effects?


  1. tutorial: use a Registry to create applications and define components
  2. use a Registry to compose Hedgehog generators


  1. how to install this library?
  2. how to do mocking?
  3. how to specialize some values in some contexts?
  4. how to control effects occurring when creating a component (like a connection pool)?
  5. how to allocate resources which must be finalized?
  6. how to extract a dot graph from the registry in an application?
  7. how to interact with a library using monad transformers?
  8. how to remove boilerplate due to parameter passing?
  9. how to create a typeclass from a record of functions?

Reference guides

  1. main operators and functions
  2. implementation notes