z=nFi      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghNone35C &Types that support conversion to HTML.A chunk of HTML source.!Extract HTML source code from an Html value.,Convert a chunk of HTML source code into an Html value as-is. Note that this bypasses any and all HTML encoding; the caller is responsible for taking appropriate measures against XSS and other potential vulnerabilities. In other words, the input to this function is considered pre-sanitized."Safely convert plain text to HTML.i$HTML-encode an individual character.j!Html itself is a trivial instancek6String is automatically HTML-encoded and converted to lm"Text is automatically HTML-encoded noijkm noijkmNone=Expressions, building blocks for the expression minilanguage.#String literal expression: "foobar"!Numeric literal expression: 123.4  Boolean literal expression: true  Literal null Variable reference: foobar $List construct: [ expr, expr, expr ] 1Object construct: { expr: expr, expr: expr, ... }foo[bar] (also dot access)foo(bar=baz, quux)Ginger statements.!A sequence of multiple statements&Run wrapped statement in a local scope,Literal output (anything outside of any tag){{ expression }}:{% if expression %}statement{% else %}statement{% endif %};{% for index, varname in expression %}statement{% endfor %}{% set varname = expr %}+{% macro varname %}statements{% endmacro %}{% include "template" %}The do-nothing statement (NOP) A block definition ( {% block %} A macro definition ( {% macro %}#?Top-level data structure, representing a fully parsed template.(A context variable name.#  !"#$%&'(#  !"#$%&'(#(#$%&' !"     !"#$%&'(None357)#Types that implement conversion to ++ Ginger value.7GA function that can be called from within a template execution context.8]Match arguments passed to a function at runtime against a list of declared argument names. !matchFuncArgs argNames argsPassed returns ((matchedArgs, positionalArgs, namedArgs) , where  matchedArgsR is a list of arguments matched against declared names (by name or by position), positionalArgs5 are the unused positional (unnamed) arguments, and  namedArgs are the unused named arguments.;Treat a + as a flat list and look up a value by integer index. If the value is not a List, or if the index exceeds the list length, return p.<Helper function; look up a value by an integer index when the index may or may not be available. If no index is given, return p.>Loosely-typed lookup: try dictionary-style lookup first (treat index as a string, and container as a dictionary), if that doesn't yield anything (either because the index is not string-ish, or because the container doesn't provide dictionary-style access), try index-based lookup.?Treat a +E as a dictionary and list all the keys, with no particular ordering.@ Convert a + to a number.A Convert a + to an qe. The conversion will fail when the value is not numeric, and also if it is too large to fit in an q.BLoose cast to boolean.9Numeric zero, empty strings, empty lists, empty objects, Null, and boolean rS are considered falsy, anything else (including functions) is considered true-ish.C-Dynamically cast to a function. This yields s a 7 if the value is a function, p if it's not.DTurn a 7 into a +FConvert Aeson Values to +ps over an arbitrary host monad. Because JSON cannot represent functions, this conversion will never produce a 7.R6Converting to HTML hooks into the ToHtml instance for lW for most tags. Tags that have no obvious textual representation render as empty HTML.SFor convenience, tA is implemented in a way that looks similar to JavaScript / JSONTTrivial instance for + itselfU The default + is equivalent to NULL.-)*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU)*+,-./0123456789:;<=>?@ABCDE-78+,-./01234569:U)*TSR;<=>?@ABCDQPONMLEKJIHGF!)*+ ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUNone3457FNV8Internal type alias for our template-runner monad stack.WsExecution context. Determines how to look up variables from the environment, and how to write out template output.XCreate an execution context for runGingerT. Takes a lookup function, which returns ginger values into the carrier monad based on a lookup key, and a writer function (outputting HTML by whatever means the carrier monad provides, e.g. putStr for IO, or tell for Writers).YCreate an execution context for runGinger. The argument is a lookup function that maps top-level context keys to ginger values.Z!Purely expand a Ginger template. v is the type for Ginger values.['Monadically run a Ginger template. The m& parameter is the carrier monad, the v) parameter is the type for Ginger values.\!Lift a value from the host monad m into the V monad.]$Lift a function from the host monad m into the V monad.u8Find the effective base template of an inheritance chainvRun a template.w2Run an action within a different template context.x$Run an action within a block contextyRun one statement.z(Deeply magical function that converts a  into a Function.{xHelper function to run a State action with a temporary state, reverting to the old state after the action has finished.|xHelper function to run a Scope action with a temporary scope, reverting to the old scope after the action has finished.}DRun (evaluate) an expression and return its value into the Run monad~[Helper function to output a HTML value using whatever print function the context provides.(VWXYZ[\]uvwxyz{|}~VWXYZ[\][ZWYXV\] VWXYZ[\]uvwxyz{|}~NoneFN ^+Error information for Ginger parser errors.`Human-readable error messageaSource name, if anybLine number, if availablecColumn number, if availabledUsed to resolve includes. Ginger will call this function whenever it encounters an {% include %}, {% import %}, or {% extends %} directive. If the required source code is not available, the resolver should return Nothing, else Just the source.e+A source identifier (typically a filename).f(Input type for the parser (source code).DHelper function to create a Ginger parser error from a Parsec error.g Parse Ginger source from a file.h Parse Ginger source from memory.a^_`abcdefgh ^_`abcdefgh hg^_`abcdfeW^_`abcdefghNoneS  !"#$%&'()*+,-./0123456789:;<=>?@ABCDEVWXYZ[\]^_`abcdefgh      !"##$%%&'(()*+,-.//0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`aabcdefghijklmnopq rstuvwxvwystzs{|}~Zginge_0lsf7TxQ81pA4301Am1rxiText.Ginger.HtmlText.Ginger.ASTText.Ginger.GValText.Ginger.RunText.Ginger.Parse Text.GingerToHtmltoHtmlHtml htmlSource unsafeRawHtmlhtml ExpressionStringLiteralENumberLiteralE BoolLiteralE NullLiteralEVarEListEObjectE MemberLookupECallE StatementMultiSScopedSLiteralSInterpolationSIfSForSSetVarS DefMacroS BlockRefSPreprocessedIncludeSNullSBlock blockBodyMacro macroArgs macroBodyTemplate templateBodytemplateBlockstemplateParentVarNameToGValtoGValGValasList asDictItemsasLookupasHtmlasText asBooleanasNumber asFunctionlengthisNullFunction matchFuncArgsisListisDict lookupIndexlookupIndexMay lookupKey lookupLoosekeystoNumbertoInt toBoolean toFunction fromFunctionscientificToText$fToGValmValue $fToGValmHtml $fToGValmText$fToGValmText0$fIsStringGVal $fToGValmBool$fToGValmScientific$fToGValmInteger $fToGValmInt$fToGValmHashMap $fToGValm[]$fToGValmMaybe $fToHtmlGVal $fShowGVal $fToGValmGVal $fDefaultGValRun GingerContext makeContextM makeContext runGinger runGingerTliftRunliftRun2 ParserErrorpeErrorMessage peSourceName peSourceLinepeSourceColumnIncludeResolver SourceNameSourceparseGingerFile parseGingerhtmlEncodeChar $fToHtmlHtml $fToHtml[]text_5c7VCmRXJenGcMPs3kwpkIData.Text.InternalText $fToHtmlTextunHtmlbaseGHC.BaseNothingghc-prim GHC.TypesIntFalseJustGHC.ShowShow baseTemplate runTemplate withTemplate withBlockName runStatement macroToGValwithLocalStatewithLocalScope runExpressionechoRunStatersScope rsCapturersCurrentTemplatersCurrentBlockName contextLookupcontextWriteHtml unaryFuncignoreArgNamesvariadicNumericFuncunaryNumericFuncvariadicStringFunc defRunState liftLookup lookupBlocksetVargetVar clearCapture appendCapture fetchCapturefromParsecErrorParser ParseStatepsBlocks ParseContext pcResolvepcCurrentSource defParseStateignore getResolverincludeincludeTemplatereduceStatements templatePderivedTemplateP baseTemplateP statementsP statementPinterpolationStmtP literalStmtP endOfLiteralP commentStmtPifStmtPsetStmtP setStmtInnerP defineBlock blockStmtPblockP macroStmtP macroHeadP callStmtP callHeadP scopeStmtPforStmtPincludePforHeadP forIteratorPforIndexedIteratorPforSimpleIteratorP forHeadInP forHeadAsP fancyTagP simpleTagP openCommentP closeCommentPopenTagP closeTagPopenPopenWPopenNWPclosePcloseWPcloseNWP expressionPoperativeExprPcomparativeExprP additiveExprPmultiplicativeExprP postfixExprPpostfixP dotPostfixP arrayAccessP funcCallPfuncArgP namedFuncArgPpositionalFuncArgPfilterP atomicExprPparenthesizedExprP listExprP objectExprPexpressionPairPgroupPbracedPvarExprP identifierP identCharPstringLiteralExprPstringLiteralP stringCharPnumberLiteralExprPnumberLiteralP followedBybefore