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 stack of the current types 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. Return an error 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
- makeSpecialized :: forall a b ins out. (Typeable a, Typeable b, Contains b out, Solvable ins out) => Registry ins out -> b
- makeSpecializedPath :: forall path b ins out. (PathToTypeReps path, Typeable b, Contains b out, Solvable ins out) => Registry ins out -> b
- makeSpecializedFast :: forall a b ins out. (Typeable a, Typeable b, Contains b out) => Registry ins out -> b
- makeSpecializedPathFast :: forall path b ins out. (PathToTypeReps path, Typeable b, Contains b out) => Registry ins out -> b
- makeSpecializedUnsafe :: forall a b ins out. (Typeable a, Typeable b) => Registry ins out -> b
- makeSpecializedPathUnsafe :: forall path b ins out. (PathToTypeReps path, Typeable b) => Registry ins out -> b
- makeSpecializedEither :: forall a b ins out. (Typeable a, Typeable b) => Registry ins out -> Either Text b
- makeSpecializedPathEither :: forall path b ins out. (PathToTypeReps path, Typeable b) => Registry ins out -> Either Text b
- makeEitherWithContext :: forall a ins out. Typeable a => Context -> Registry ins out -> Either Text 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
SPECIALIZED VALUES
makeSpecialized :: forall a b ins out. (Typeable a, Typeable b, Contains b out, Solvable ins out) => Registry ins out -> b Source #
make for specialized values
makeSpecializedPath :: forall path b ins out. (PathToTypeReps path, Typeable b, Contains b out, Solvable ins out) => Registry ins out -> b Source #
make for specialized values
makeSpecializedFast :: forall a b ins out. (Typeable a, Typeable b, Contains b out) => Registry ins out -> b Source #
makeFast for specialized values
makeSpecializedPathFast :: forall path b ins out. (PathToTypeReps path, Typeable b, Contains b out) => Registry ins out -> b Source #
makeFast for specialized values
makeSpecializedUnsafe :: forall a b ins out. (Typeable a, Typeable b) => Registry ins out -> b Source #
makeUnsafe for specialized values
makeSpecializedPathUnsafe :: forall path b ins out. (PathToTypeReps path, Typeable b) => Registry ins out -> b Source #
makeUnsafe for specialized values
makeSpecializedEither :: forall a b ins out. (Typeable a, Typeable b) => Registry ins out -> Either Text b Source #
makeEither for specialized values
makeSpecializedPathEither :: forall path b ins out. (PathToTypeReps path, Typeable b) => Registry ins out -> Either Text b Source #
makeEither for specialized values