h$$U      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                    None   techniqueWhether Systme International metric prefixes can be used, or (as is the case of time units) quantities should not be aggregated to other scales. techniqueA decimal number with a fixed point resolution. The resolution (number of decimal places) is arbitrary within the available range. This isn't really for numerical analysis. It is for carrying information.Implementation noteInternally this is a floating point where the mantissa is 19 characters wide (the width of a 64-bit int in base 10). Thus the biggest number representable is 9223372036854775807 and the smallest is 0.0000000000000000001. We could change this to Integer and be arbitrary precision but meh.       None 8: P?),+*-./01;:96528374=BCDEFGHIQPONMLKJRSTUVXYWZ[\]^_cba`defg?^_cba`d\]eZ[VXYWTURSfHIQPONMLKJgFGECD=B1;:96528374/0-.),+*None None '(/ techniqueNames. Always needing names. These ones are from original work when we envisioned technique as a shallow embedding of a domain specific language implemented in Haskell. Comments describing constructors are taken from a suggestion by Oleg Kiselyov on page 23 of his course "Typed Tagless Final Interpreters" that the constructors of a simply typed lambda calculus in this style could be considered a "minimal intuitionistic logic" which is absolutely fabulous. techniqueThe internal representation of a Procedure, with ambiguities resolved.We landed on Subroutine as the name of translated user-defined Procedure.Procedures which are actually fundamental [in the context of the domain specific language] represented by builtin IO actions which we call Primatives.The first constructor, Unresolved, is for the first stage pass through the translate phase when we are still accumulating definitions, thereby allowing for the forward use of not-yet-defiend procedures that will be encountered in the same scope. techniqueThe resolved value of eiter a literal or function applicaiton, either as that literal, the expression, or as the result of waiting on the variable it was assigned to.Need names? Science names newly discovered creatures in Latin. I don't speak Latin, but neither does anyone else so we can just make words up. Yeay! (The lengths some people will go to in order to avoid qualified imports is really impressive, isn't it?)None techniqueIn order to execute a Procedure we need to supply a Context: an identifier for the event (collection of procedure calls) it is a part of, and the path history we took to get here. techniqueThe heart of the evaluation loop. Translate from the abstract syntax tree into a monadic sequence which results in a Result. techniqueTake a step and lauch it asynchronously, binding its result to a name. Returns a promise of a value that can be in evaluated (block on) when needed.  None None '( techniquePunctuate a list with commas annotated with Symbol highlighting.None  technique2ErrorItem is a bit overbearing, but we handle its four cases by saying single quotes around characters, double quotes around strings, no quotes around labels (descriptive text) and hard code the end of input and newline cases. techniqueWhen we get a failure in the parsing stage **megaparsec** returns a ParseErrorBundle. Extract the first error message therein (later handle more? Yeah nah), and convert it into something we can use. None m None  techniqueEnvironment in the type-theory sense of the word: the map(s) between names and their bindings. techniqueTake a translator action and an environment and spin it up into a Step or nest of Steps ( Subroutine) suitable for interpretation. In other words, translate between the concrete syntax types and the abstract syntax we can feed to an evaluator. techniqueBlocks are scoping mechanisms, so accumulated environment is discarded once we finish resolving names within it. technique9Note that this does NOT add the steps to the Environment. techniqueA given procedure call can either be to a user declared in-scope procedure or to a primative builtin. We have Invocation as the Step constructors for these cases. techniqueIdentifiers are valid names but Names are unique, so that we can put them into the environment map. This is where we check for reuse of an already declared name (TODO) and given the local use of the identifier a scope-local (or globally?) unique name. techniqueAccumulate a Step. techniqueThis begins a new (more refined) scope and does *not* add its declarations or variables to the current environment. techniqueThe second stage of translation phase: iterate through the Steps and where a function call is made, look up to see if we actually know what it is. techniqueUpdate the environment's idea of where in the source we are, so that if we need to generate an error message we can offer one with position information.     !"#$%&'()*+,-./012344556789:;<=>?@ABCDEFGHIJKKLLMNOPQRSTUUVVWXYZ[[\\]]^_`abcdefghijklmnopqrstuvwxyz{|}~                                    9technique-0.2.5-74iyuyeGcEkDdDAdRF1gMI-technique-internalTechnique.QuantityTechnique.LanguageTechnique.ParserTechnique.InternalTechnique.EvaluatorTechnique.BuiltinsTechnique.FormatterTechnique.FailureTechnique.DiagnosticsTechnique.TranslateUnitunitName unitPlural unitSymbol unitGroupPrefix prefixName prefixSymbol prefixScaleGroupMetricTimeNormal Scientific EngineeringDecimal MagnitudeSymbolQuantityNumber decimalToRope isZeroDecimal negateDecimalunitsprefixes $fShowDecimal $fShowUnit$fEqUnit $fShowPrefix $fEqPrefix $fShowGroup $fEqGroup$fShowQuantity $fEqQuantity $fOrdQuantity $fEqDecimal $fOrdDecimalOperator WaitEitherWaitBothCombineBindingTablet Expression ApplicationNoneTextAmount UndefinedObjectVariable OperationGrouping Restriction Statement AssignmentExecuteComment DeclarationBlankSeriesLocated locationOfOffsetBlock ProcedureprocedureOffset procedureNameprocedureParamsprocedureInputprocedureOutputprocedureTitleprocedureDescriptionprocedureBlockTypeMarkdown AttributeRolePlaceInheritLabel Identifier TechniquetechniqueVersiontechniqueLicensetechniqueCopyright techniqueBodyemptyTechnique unIdentifierunitTypeemptyProcedure$fKeyIdentifier$fShowMarkdown$fLocatedExpression$fLocatedStatement$fLocatedProcedure$fShowTechnique $fEqTechnique$fShowExpression$fOrdExpression$fEqExpression $fShowTablet $fOrdTablet $fEqTablet $fShowBinding $fEqBinding $fOrdBinding $fShowBlock $fEqBlock $fOrdBlock$fShowStatement$fOrdStatement $fEqStatement$fShowProcedure $fEqProcedure$fOrdProcedure$fShowOperator $fEqOperator $fOrdOperator $fShowType$fEqType $fOrdType $fEqMarkdown $fOrdMarkdown$fShowAttribute $fEqAttribute$fOrdAttribute $fShowLabel $fEqLabel $fOrdLabel$fShowIdentifier$fEqIdentifier$fOrdIdentifier$fGenericIdentifier$fHashableIdentifier pMagicLine pSpdxLinepProcedureDeclaration pIdentifierpType stringLiteral numberLiteral pQuantity pAttribute pExpression pStatementpBlockpProcedureCode pTechniqueStepKnownBenchDependsNoOpTuple Asynchronous InvocationNestedNameFunction Unresolved Subroutine PrimitiveValueUnitusLiterali Quanticle Tabularum ParametriqPromise functionName $fMonoidStep$fSemigroupStep $fLocatedStep $fEqFunction$fShowFunction$fEqStep $fShowStep$fEqName $fShowName $fEqValue $fShowValueEvaluateContext contextEvent contextPath contextValues unEvaluate evaluateStepfunctionApplication executeActionblockUntilValue assignNames$fFunctorEvaluate$fApplicativeEvaluate$fMonadEvaluate$fMonadIOEvaluate$fMonadReaderContextEvaluatebuiltinProceduresbuiltinProcedureTaskbuiltinProcedureRecordbuiltinProcedureWaitEitherbuiltinProcedureWaitBothbuiltinProcedureCombineValuesTechniqueToken MagicTokenProcedureToken TypeToken SymbolToken OperatorToken VariableTokenApplicationToken LabelToken StringToken QuantityToken RoleToken ErrorToken FilenameToken StepTokencolourizeTechniquecommaCatnumberToSuperscript toSuperscript $fPrettyLabel$fPrettyQuantity$fPrettyIdentifier$fPrettyProcedure$fRenderTechnique$fRenderOperator$fRenderBinding $fRenderLabel$fRenderTablet$fRenderQuantity$fRenderDecimal$fRenderIdentifier$fRenderExpression$fRenderAttribute$fRenderStatement $fRenderBlock$fRenderMarkdown $fRenderType$fRenderProcedureCompilationError FailureReason InvalidSetup ParsingFailedVariableAlreadyInUseProcedureAlreadyDeclaredCallToUnknownProcedureUseOfUnknownIdentifierEncounteredUndefinedSourcesourceContentssourceFilename sourceOffsetStatusOkFailedReload emptySource exitCodeForfancyPunctuateformatErrorItemnumberOfCarotsextractErrorBundleextractParseError$fRenderSource$fLocatedSource$fRenderFailureReason$fEnumFailureReason$fRenderCompilationError$fExceptionCompilationError$fRenderStatus$fShowCompilationError$fShowFailureReason$fEqFailureReason $fEqSource $fOrdSource $fShowSource $fRenderValue $fRenderName $fRenderStep$fRenderFunction Translate EnvironmentenvironmentVariablesenvironmentFunctionsenvironmentRoleenvironmentSourceenvironmentAccumulatedemptyEnvironment runTranslatetranslateTechniquetranslateProceduretranslateBlocktranslateStatementtranslateExpressionregisterProcedure failBecauselookupVariableinsertVariable appendStepapplyRestrictionresolveFunctionslookupFunctionsetLocationFrom$fFunctorTranslate$fApplicativeTranslate$fMonadTranslate $fMonadStateEnvironmentTranslate%$fMonadErrorCompilationErrorTranslate$fEqEnvironment$fShowEnvironment