Safe Haskell | None |
---|---|
Language | Haskell2010 |
This module provides functions to make values out of a registry. The general algorithm is the following
- for a given value type search in the existing list of values a value with the same type. If found return it
- if not found search a function having the desired output type if found, now try to recursively make all the input parameters. Keep a context of the current type trying to be built.
- when trying to make an input parameter if the current input type is already in the types trying to be built then there is a cycle. Throw an exception in that case
- when a value has been constructed place it on top of the existing value list so that it can be reused by other functions
Synopsis
- make :: forall a ins out. (Typeable a, Contains a out, Solvable ins out) => Registry ins out -> a
- makeFast :: forall a ins out. (Typeable a, Contains a out) => Registry ins out -> a
- makeEither :: forall a ins out. Typeable a => Registry ins out -> Either Text a
- makeUnsafe :: forall a ins out. Typeable a => Registry ins out -> a
Documentation
make :: forall a ins out. (Typeable a, Contains a out, Solvable ins out) => Registry ins out -> a Source #
For a given registry make an element of type a We want to ensure that a is indeed one of the return types We also try to statically check if there aren't other possible errors
makeFast :: forall a ins out. (Typeable a, Contains a out) => Registry ins out -> a Source #
Same as make but without the solvable constraint to compile faster in tests for example
makeEither :: forall a ins out. Typeable a => Registry ins out -> Either Text a Source #
This version of make only execute checks at runtime this can speed-up compilation when writing tests or in ghci
makeUnsafe :: forall a ins out. Typeable a => Registry ins out -> a Source #
This version of make only execute checks at runtime this can speed-up compilation when writing tests or in ghci