Skip to content
Components as records of functions for Haskell
Branch: master
Clone or download
Type Name Latest commit message Commit time
Failed to load latest commit information.
src/Data added a way to tag constructors for data generation Jan 28, 2019
test group properties by module name to be able to run them selectively Feb 28, 2019
.gitignore added .ghc.environment.x86_64* to gitignore Nov 21, 2018
Setup.hs added the some initial box code Aug 17, 2018


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:

  • create applications out of software components ("dependency injection")
  • fine tune JSON encoders/decoders
  • create composable data generators for nested datatypes

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 and effects?


  1. 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 initialize components in an application?
  7. how to extract a dot graph from the registry in an application?
  8. how to interact with a library using monad transformers?

Reference guides

  1. main operators and functions
  2. implementation notes
You can’t perform that action at this time.