!17      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~  None$&'/18=>?@ACEHMPSUVX_`fgkregistrynA thread-safe write-once cache. If you need more functionality, (e.g. multiple write, cache clearing) use an  instead.registryqFetch the value stored in the cache, or call the supplied fallback and store the result, if the cache is empty.registryCreate an empty cache.None"$&'-./18=>?@ACEHMPSUVX_`fgk#w registry>Return true if the type of this type rep represents a functionregistry&Show the full type of a typeable valueregistry)Show the full type of a typeable functionregistryBShow the full type of a typeable value where nested types like IO[Int]T or functions are represented and non GHC types are shown with their module names registryShow the full type of a typeable value where nested types like IO[Int] or functions are represented and non GHC types are shown with their module names registryShow a type like m a registry:Show a single type. Don't display the module for GHC types registry+Return true if the module name can be shown registry3Tweak some standard module names for better displayregistry^This is an attempt to better render "nested" types like IO (Maybe Text) The input value is "IO Maybe Text" and the output text will be "IO (Maybe Text)"W This will unfortunately not work with types having several type parameters like IO (Either Text Int)registry Show a type with its module name    None$&'/18=>?@ACEHMPSUVX_`fgkO}#registryList of functions modifying some values right after they have been built. This enables "tweaking" the creation process with slightly different results. Here SomeTypeRep is the target value type a andregistrymSpecification of values which become available for construction when a corresponding type comes in contextregistry`The types of values that we are trying to build at a given moment of the resolution algorithmregistryeList of values available which can be used as parameters to constructors for building other valuesregistryQThis is a list of functions (or "constructors") available for constructing valuesregistry,A Typed value or function can be added to a Registry& It is either a value, having both  and * information or a function having just  informationregistryDescription of a "! with input types and output type"registryA Function is the 7 representation of a Haskell function + its description$registryDescription of a value. It might just have a description for its type when it is a value created by the resolution algorithm(registryA ( is the  representation of a Haskell value + its description It is either provided by the user of the Registry or created as part of the resolution algorithm+registry"Return the dynamic part of a value,registry1Describe a value with its type and actual content-registry#Describe a value with only its type.registryShow a Value from the Registry/registry.Create a Value from a Haskell value, with its  description0registry3Create a Value from a Haskell value, with only its  description1registryCreate a Value from a  value and some description2registryType representation of a (3registryDynamic representation of a (4registryThe description for a (5registryA ValueDescription as . If the actual content of the (7 is provided display the type first then the content6registry Create a " value from a Haskell function7registry Describe a " (which doesn't have a % instance) that can be put in the Registry8registryShow a Function as  using its Description9registryThe Description of a ":registryDynamic representation of a ";registryType representation of a "<registryA  as =registryReturn True if a " has some input parameters>registryDisplay a list of constructors?registry.Add one more Function to the list of Functions@registryDisplay a list of valuesAregistry(Add one more Value to the list of ValuesBregistryzDisplay a list of specializations for the Registry, just showing the context (a type) in which a value must be selectedCregistry\Display a list of modifiers for the Registry, just showing the type of the modified value4! "#$%'&(*)+,-./0123456789:;<=>?@ABC4(*)+$%'&,-./012345"#6! 789:;<=>?@ABCNone$&'/18=>?@ACEHMPSUVX_`fgk^S Yregistry A DOT graph\registryFA function application with an output value and a list of input values`registryTA list of function applications created when creating a value out of the RegistryaregistryAMake a list of graph edges from the list of function applicationsbregistry5Make a DOT graph out of all the function applicationscregistry7A DOT edge representing the dependency between 2 valuesdregistry'Description of a Value in the DOT grapheregistryWe need to process the node descriptions - we add quotes arountd the text - we remove quotes (") inside the text - we escape newlinesfregistryIRemove quotes from a textual description to avoid breaking the DOT formatgregistryCReplace n with \n so that newlines are kept in node descriptionsYZ[\]_^`abcdefg`\]_^aYZ[bcdefgNone$&'/18=>?@ACEHMPSUVX_`fgkg kregistry*Monadic stack for the resolution algorithmlregistry)Return a value from the Stack if possiblemregistryaReturn the state of the stack after executing the action This returns the list of built valuesnregistry5Return the list of applied functions after resolutionoregistryGet the current list of valuespregistry"Get the current list of operationsqregistry!Modify the current list of valuesrregistryGet the current list of valuessregistry6Store a function application in the list of operations klmnopqrs klmnopqrsNone $&'/18=>?@ACEHMPSUVX_`fgkotregistryApply a function to a list of  valuesuregistry4Apply a Dynamic function to a list of Dynamic valuesvregistry6Apply just one dynamic parameter to a dynamic functionwregistry4If Dynamic is a function collect all its input typesxregistry;If the input type is a function type return its output typetregistryfunctionregistryinputsregistryresulturegistryfunctionregistryinputsregistryresulttuvwxtuvwxNone"$&'./18=>?@ACEHMPSUVX_`fgk!yregistryFind a value having a target type from: - a list of "preferred values" (Specializations) to select when we are trying to find the targe in a specific context (Context). Context describes the types of values we are currently trying to (recursively) make!a list of dynamic values (Values)zregistryRFind a constructor function returning a target type from a list of constructors{registryGiven a newly built value, check if there are modifiers for that value and apply them before "storing" the value which means adding it on top of the registry, represented by the  state in StateT Values. We use a StateT Either because applying modifiers could fail and we want to catch and report the error. Note that this error would be an implementation error (and not a user error) since at the type-level everything should be correctyz{yz{None#$&'-./18=>?@ACEHMPSUVX_`fgkc|registryoMake a value from a desired output type represented by SomeTypeRep and a list of possible constructors A N is passed in the form of a stack of the types we are trying to build so far Functions is the list of all the constructors in the Registry Specializations is a list of specific values to use in a given context, overriding the normal search Modifiers is a list of functions to apply right before a value is stored in the Registry}registryMake the input values of a given function When a value has been made it is placed on top of the existing registry so that it is memoized if needed in subsequent calls}registryinput types to buildregistry$current context of types being builtregistry#available functions to build valuesregistry0list of values to use when in a specific contextregistry-modifiers to apply before storing made values|}|} None"$&'/18=>?@ACEHMPSUVX_`fgk~registrygTypeclass for lifting a function with a result of type m b into a function with a result of type n bregistryITypeclass for lifting impure functions to effectful arguments and resultsregistryGTypeclass for lifting pure functions to effectful arguments and resultsregistry7Lift a pure function to effectful arguments and resultsregistry=Lift an effectful function to effectful arguments and resultsregistry^Lift a function returning an effectful result to a function returning another effectful result ~ ~ None#$&',-./18=>?@ACEHMPSUVX_`fgk%registryExtracted from the typelevel-sets project and adapted for the Registry datatype This union deduplicates elements only if they appear in contiguously What we really want is typelevel sets but they are too slow for now 5https://github.com/dorchard/type-level-sets/issues/17registrykFrom the list of all the input types and outputs types of a registry Can we create all the output types?registryHCompute if each element of a list of types is contained in another listregistryTShorthand type alias when many such constraints need to be added to a type signatureregistry1Compute if a type is contained in a list of typesregistry&Compute the output type for a functionregistry.Compute the list of input types for a function None"$&'./18=>?@ACEHMPSUVX_`fgkregistryaContainer for a list of functions or values Internally all functions and values are stored as 5 values so that we can access their representationregistryAppend 2 registries togetherregistryFStore an element in the registry Internally elements are stored as  valuesregistry^Add an element to the Registry - Alternative to register where the parentheses can be ommittedregistryThe empty Registryregistry)Create a value which can be added to the registry)Create a value which can be added to the  and "lift" it to an  contextregistryCreate a "lifted" a Valueregistry,Create a function which can be added to the registryThis is a shortcut to  fun . allTo where allTo* lifts all the inputs and output to an  contextregistryThis is a shortcut to  fun . argsTo where allTo2 lifts all the inputs to an Applicative contextregistryFor a given type a/ being currently built when a value of type b" is required pass a specific valueregistry8This is similar to specialize but additionally uses the  instance of b> to display more information when printing the registry outregistryFor a given type a/ being currently built when a value of type b% is required pass a specific valueregistryhOnce a value has been computed allow to modify it before storing it This keeps the same registry typeregistryFOnce a value has been computed allow to modify it before storing itregistryTReturn singleton values for a monadic type Note that the returned Registry is in = because we are caching a value and this is a side-effect!5 None#$&'-./18=>?@ACEHMPSUVX_`fgkUregistryFor 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 errorsregistryZSame as make but without the solvable constraint to compile faster in tests for exampleregistryrThis version of make only execute checks at runtime this can speed-up compilation when writing tests or in ghciregistryThis version of ^ only execute checks at runtime this can speed-up compilation when writing tests or in ghci None $&'/18=>?@ACEHMPSUVX_`fgkregistry&Make a DOT graph for a specific value a built from the  aL is at the root of the graph and its children are values needed to build aregistry Similar to make but does not check if a[ can be made out of the Regisry You can use this version to get faster compilation timesregistry Similar to make but does not check if a can be made out of the Regisry2 It returns a Left value if that's not the caseregistry Similar to make but does not check if a can be made out of the Regisry2 and throws an exception if that's not the caseregistry Return an `[ value listing all the function applications necessary to create a value of a given typeregistry Return an ` value listing all the function applications necessary to create a value of a given type (and throws an exception if the value cannot be created)YZ[\]^_`abcdefgNone$&'/18=>?@ACEHMPSUVX_`fgk registry Result of a registry#A list of actions to run at startupregistryCreate a warmup action for a given component The type of the component is used as the description for the action to executeregistry Create a  from an  action returning a registry The empty registry Create a 0 with no action but just the type of a componentregistryReturn  if a  was successfulregistryCreate a successful registryCreate a failed registry,Extract the list of all the messages from a registry!Simple sequential warmup strategyregistrya runs both tasks and cumulate the results exceptions are being transformed into Failed resultsNone"$&'/148=>?@ACEHMPSUVX_`fgk registryzThis newtype creates a monad to sequence component creation actions, cumulating start/stop tasks found along the wayregistry+Data type encapsulating resource finalizersregistryRun all finalizersregistryjUse a RIO value and make sure that resources are closed Only run the action if the warmup is successfulregistryThis function must be used to run services involving a top component It creates the top component and invokes all warmup functionsThe passed function fH is used to decide whether to continue or not depending on the ResultregistrydThis can be used if you want to insert the component creation inside another action managed with . Or if you want to call  yourself laterregistryOUse a RIO value and make sure that resources are closed Don't run the warmupregistryInstantiate the component but don't execute the warmup (it may take time) and keep the Stop value to clean resources later This function statically checks that the component can be instantiatedregistryInstantiate the component but don't execute the warmup (it may take time) and lose a way to cleanu up resources | Almost no compilation time is spent on checking that component resolution is possibleregistryInstantiate the component but don't execute the warmup (it may take time) and lose a way to cleanu up resources Don't even check that a component can be built out of the registryregistrySame as  but keep the * value to be able to clean resources laterregistryLift a  action into the  monadregistryAllocate some resourceNone$&'/18=>?@ACEHMPSUVX_`fgkHeYZ[\]^_`abcdefg~None $&'/18=>?@ACEHMPSUVX_`fgk !!""##$%%&&'()**+,--../0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abbcddefghijklmnopqrstuvwxyz{|}~                  'registry-0.1.2.2-I8f48tXP7cB6fNC5R40UnXData.Registry.Internal.Cache!Data.Registry.Internal.ReflectionData.Registry.Internal.Types!Data.Registry.Internal.OperationsData.Registry.Internal.StackData.Registry.Internal.DynamicData.Registry.Internal.RegistryData.Registry.Internal.MakeData.Registry.LiftData.Registry.SolverData.Registry.RegistryData.Registry.MakeData.Registry.DotData.Registry.WarmupData.Registry.RIO Data.RegistryPaths_registryCachefetchnewCache $fEqCache isFunctionshowFullValueTypeshowFullFunctionTypeshowTheFullValueTypeshowTheFullFunctionType showNestedshowSingleTypemustShowModuleName tweakNestedparenthesizeNestedshowWithModuleName ModifiersSpecializationsContext_contextValues FunctionsTyped TypedValue TypedFunctionFunctionDescription _inputTypes _outputTypeFunctionValueDescription _valueType _valueValueValue CreatedValue ProvidedValuegetValueDynamic describeValuedescribeTypeableValue showValue createValuecreateTypeableValuecreateDynValuevalueDynTypeRepvalueDynvalDescriptionvalDescriptionToTextcreateFunctiondescribeFunction showFunctionfunDescriptionfunDyn funDynTypeRepfunDescriptionToText hasParametersdescribeFunctions addFunctiondescribeValuesaddValuedescribeSpecializationsdescribeModifiers$fEqValueDescription$fShowValueDescription $fShowValue$fEqFunctionDescription$fShowFunctionDescription$fShowFunction$fShowFunctions$fSemigroupFunctions$fMonoidFunctions $fShowValues$fSemigroupValues$fMonoidValues $fShowContext$fSemigroupContext$fMonoidContext$fShowSpecializations$fSemigroupSpecializations$fMonoidSpecializations$fShowModifiers$fSemigroupModifiers$fMonoidModifiersDotunDotAppliedFunction _outputValue _inputValues Operations makeEdgestoDot toDotEdgenodeDescriptionadjust removeQuotesescapeNewlines$fShowAppliedFunction$fEqDot $fShowDotStackrunStack execStack evalStack getValues getOperation modifyValuesmodifyOperationsfunctionApplied applyFunctionapplyFunctionDyn applyOneParamcollectInputTypes outputType findValuefindConstructor storeValue makeUntyped makeInputsApplyVariadic2applyVariadic2ApplyVariadic1applyVariadic1 ApplyVariadic applyVariadicallToargsTooutTo$fApplyVariadicf->b$fApplyVariadicfab$fApplyVariadic1f->b$fApplyVariadic1ffb$fApplyVariadic2fg->b$fApplyVariadic2fgfb:++SolvableIsSubset:-ContainsOutputInputs$fIsSubset:out$fIsSubset[]out$fSolvableinsoutRegistry_values _functions_specializations _modifiers<+>register+:endvalvalToliftProvidedValuefunfunTofunAs specialize specializeValspecializeValTospecializeUnsafespecializeUnsafeValspecializeUnsafeValTotweak tweakUnsafe singletonsingletonUnsafe$fMonoidRegistry$fSemigroupRegistry$fShowRegistrymakemakeFast makeEither makeUnsafemakeDot makeDotFast makeDotEither makeDotUnsafemakeOperationsEithermakeOperationsUnsafeResultEmptyOkFailedWarmup_warmUpwarmupOf createWarmupnoWarmup declareWarmup isSuccessokfailedmessages runWarmuprunBoth$fSemigroupResult$fMonoidResult $fEqResult $fShowResult$fMonoidWarmup$fSemigroupWarmupRIOrunRIOStoprunStopwithRIO withRegistry runRegistryTwithNoWarmupRIOexecuteRegistry unsafeRununsafeRunDynamicunsafeRunWithStopunsafeRunDynamicWithStop warmupWithallocate$fMonadResourceRIO$fMonadBaseIORIO$fMonadThrowRIO $fMonadIORIO $fMonadRIO$fApplicativeRIO $fFunctorRIObaseGHC.MVarMVarGHC.ShowShowData.Typeable.InternalTypeable Data.DynamicDynamic text-1.2.3.1Data.Text.InternalTextGHC.Base Applicativeghc-prim GHC.TypesIOTrue&resourcet-1.2.2-6aHFYK7cYsT6IDIL0wEb5U%Control.Monad.Trans.Resource.Internal ResourceTControl.Monad.Trans.Resource runResourceTversion getBinDir getLibDir getDynLibDir getDataDir getLibexecDir getSysconfDirgetDataFileName