}      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~! Safe-Infered  Safe-InferedConverts a GHC  to a Template Haskell , going via a .  Converts an  to a Template Haskell , going via a . #Get the unqualified name from an Id/Var. 8Hacks until we can find the correct way of doing these. 8Hacks until we can find the correct way of doing these. =This is hopeless O(n), because the we could not generate the s that match,  for use of the GHC . Pretty-print an identifier.  Safe-Infered-Nested lists to represent scoping structure. 9A simple expression language AST, for things parsed from  or JSON structures.  Application. Commands (to be looked up in !"). (Variable names (refers to source code). &Count the total number of statements. Parse an expression. 5Parse a list of statements, seperated by semicolons.           Safe-Infered 0Unlike everything else, there is no synonym for   % provided by GHC, so we provide one. IA (potentially recursive) definition is an identifier and an expression. 6 In GHC Core, recursive definitions are encoded as (,   ) pairs. ! This data type is isomorphic. RCore is the sum type of all nodes in the AST that we wish to be able to traverse.  All Node" instances in HERMIT define their Generic type to be . A case alternative. An expression. A recursive definition. A binding group. (A program (list of top-level bindings).  The module. VConvert a list of recursive definitions into an (isomorphic) recursive binding group.    Safe-InferedZThe HERMIT context, containing all bindings in scope and the current location in the AST. G The bindings here are lazy by choice, so that we can avoid the cost / of building the context if we never use it. #All (important) bindings in scope. The depth of the bindings. The  $ to the current node from the root. The   of the current module. !HERMIT''s representation of variable bindings. ";For case wildcard binders. First expr points to scrutinee, H second to AltCon (which can be converted to Constructor or Literal). #.For a lambda binding you only know the depth. $<Binding depth, whether it is recursive, and the bound value B (which cannot be inlined without checking for scoping issues). %Get the depth of a binding. &Create the initial HERMIT  by providing a  . '+Update the context by extending the stored   to a child. (+Add all bindings in a binding group to the . )2Add the bindings for a specific case alternative. *PAdd a binding that you know nothing about, except that it may shadow something. M If so, do not worry about it here, just remember the binding and the depth. 6 When we want to inline a value from the environment, ; we then check to see what is free in the inlinee, and see = if any of the frees will stop the validity of the inlining. +@Add the Ids bound by a DataCon in a case. Like lambda bindings, F in that we know nothing about them, but all bound at the same depth, 8 so we cannot just fold addLambdaBinding over the list. ,*Lookup the binding for an identifier in a . -&List all the identifiers bound in the . .+Determine if an identifier is bound in the .  The HERMIT context stores an  " to the current node in the tree.  !"#$%&'()*+,-.  !"#$%&'()*+,-.!$#"% &'+()* ,-.  !$#"%&'()*+,-.  Safe-Infered /A message packet. 2#The HERMIT monad is kept abstract. 3'A way of sending messages to top level 6A store of saved definitions. 7#A label for individual defintions. :"Save a definition for future use. ;&Lookup a previously saved definition. <Eliminator for 2. = can be lifted to 2. >HMake a unique identifier for a specified type based on a provided name. ?KMake a unique type variable for a specified kind based on a provided name. /0123456789:;<=>?@A/0123456789:;<=>?@A2<=>?@76:;8345/10A9/1023456789:;<=>?@A Safe-InferedTEVA synonym for the identity rewrite. Convienient to avoid importing Control.Category. FTranslate a module. ~ Slightly different to the other congruence combinators: it passes in *all* of the original to the reconstruction function. G Rewrite the  child of a module. HTranslate an empty list. I"Translate a program of the form: ( : ) J0Rewrite all children of a program of the form: ( : ) K0Rewrite any children of a program of the form: ( : ) L-Rewrite one child of a program of the form: ( : ) M'Translate a binding group of the form: NonRec    N Rewrite the  ' child of a binding group of the form: NonRec    O'Translate a binding group of the form: Rec [] P5Rewrite all children of a binding group of the form: Rec [] Q5Rewrite any children of a binding group of the form: Rec [] R2Rewrite one child of a binding group of the form: Rec [] S.Translate a recursive definition of the form: Def    T Rewrite the  . child of a recursive definition of the form: Def    U+Translate a case alternative of the form: (, [],  ) V Rewrite the  + child of a case alternative of the form: (, ,  ) W%Translate an expression of the form: Var  X%Translate an expression of the form: Lit  Y%Translate an expression of the form: App     Z3Rewrite all children of an expression of the form: App     [3Rewrite any children of an expression of the form: App     \0Rewrite one child of an expression of the form: App     ]%Translate an expression of the form: Lam    ^ Rewrite the  % child of an expression of the form: Lam    _%Translate an expression of the form: Let    `3Rewrite all children of an expression of the form: Let    a3Rewrite any children of an expression of the form: Let    b0Rewrite one child of an expression of the form: Let    c%Translate an expression of the form: Case     [] d3Rewrite all children of an expression of the form: Case     [] e3Rewrite any children of an expression of the form: Case     [] f0Rewrite one child of an expression of the form: Case     [] g%Translate an expression of the form: Cast    h Rewrite the  % child of an expression of the form: Cast    i%Translate an expression of the form: Tick    j Rewrite the  % child of an expression of the form: Tick    k%Translate an expression of the form: Type  l%Translate an expression of the form: Coercion  m'Translate a binding group of the form: Rec [(,  )] n5Rewrite all children of a binding group of the form: Rec [(,  )] o5Rewrite any children of a binding group of the form: Rec [(,  )] p2Rewrite one child of a binding group of the form: Rec [(,  )] q"Translate a program of the form: (NonRec   ) :  r4Rewrite all children of an expression of the form: (NonRec   ) :  s4Rewrite any children of an expression of the form: (NonRec   ) :  t1Rewrite one child of an expression of the form: (NonRec   ) :  u&Translate an expression of the form: (Rec []) :  v4Rewrite all children of an expression of the form: (Rec []) :  w4Rewrite any children of an expression of the form: (Rec []) :  x1Rewrite one child of an expression of the form: (Rec []) :  y&Translate an expression of the form: (Rec [(,  )]) :  z4Rewrite all children of an expression of the form: (Rec [(,  )]) :  {4Rewrite any children of an expression of the form: (Rec [(,  )]) :  |1Rewrite one child of an expression of the form: (Rec [(,  )]) :  }%Translate an expression of the form: Let (NonRec   )   ~3Rewrite all children of an expression of the form: Let (NonRec   )   3Rewrite any children of an expression of the form: Let (NonRec   )   0Rewrite one child of an expression of the form: Let (NonRec   )   %Translate an expression of the form: Let (Rec [])   3Rewrite all children of an expression of the form: Let (Rec [])   3Rewrite any children of an expression of the form: Let (Rec [])   0Rewrite one child of an expression of the form: Let (Rec [])   %Translate an expression of the form: Let (Rec [(,  )])   3Rewrite all children of an expression of the form: Let (Rec [(,  )])   3Rewrite any children of an expression of the form: Let (Rec [(,  )])   0Rewrite one child of an expression of the form: Let (Rec [(,  )])   %Translate an expression of the form: Case     [(, [],  )] 3Rewrite all children of an expression of the form: Case     [(, [],  )] 3Rewrite any children of an expression of the form: Case     [(, [],  )] 0Rewrite one child of an expression of the form: Case     [(, [],  )] Promote a rewrite on   to a rewrite on . Promote a rewrite on  to a rewrite on . Promote a rewrite on  to a rewrite on . Promote a rewrite on  to a rewrite on . Promote a rewrite on  to a rewrite on . Promote a rewrite on   to a rewrite on . Promote a translate on   to a translate on . Promote a translate on  to a translate on . Promote a translate on  to a translate on . Promote a translate on  to a translate on . Promote a translate on  to a translate on . Promote a translate on   to a translate on . kBCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab cdefghijklmnopqrstuvwxyz{|}~BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~cDCBEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop}~qrstuvwxyz{|kBCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ !"#$%&'()*+,-./ Safe-Infered+*The class of things that can be made into s.  To be an  there must exist an isomorphic  type that is an instance of . An isomorphic wrapper. Wrap a value in a . Unwrap a value from a . An  is a D value with some associated meta-data (name, help string and tags). Get the name of an . Get the  value stored in an . Get the list of help  s for an .  List all the s associated with an  "Tags are meta-data that we add to (s to make them sortable and searchable. Add a  to an .  Remove a  from an .  Check if an  has the specified . +A data type of logical operations on tags. 7Requirement: commands cannot have the same name as any  , (or the help function will not find it).  These should be  user facing, because they give the user : a way of sub-dividing our confusing array of commands. Things we are trying out. +Something is not finished yet, do not use.  TODO: check before the release. -a command that uses its context, like inline Commands that are run by #$. Version control. Commands to help debugging. Operation has a precondition. It's all about the commute. &Introduce something, like a new name.  Something that passes or fails. A question we ask. Uses e or  to focus onto something. O(1) O(n) $Command may operate multiple times. %& command. *The arrow of evaluation (reduces a term). Shell command. Help information for Fs is stored as a list of strings, designed for multi-line displaying.  names are just strings. ?Lists all the tags paired with a short description of what they' re about. An "and" on s. An "or" on s. A "not" on s. The primitive way to build an . Build a '( from names to  values. Build a '(! from names to help information. F;?! Safe-InferedAn  a is a possible means of converting a  value to a value of type a.  Interpret an  by looking up the appropriate (s) in the provided '(, then interpreting the (s) with the provided Ws, returning the first interpretation to succeed (or an error string if none succeed). !The primitive way of building an .   Safe-Infered  Safe-Infered*s involving navigating to named entities. AFind the path to the RHS of the binding group of the given name. 6Find the path to the definiiton of the provided name. >Find the path to the RHS of the definition of the given name. =Verify that this is a binding group defining the given name. 6Verify that this is the definition of the given name. !Find all the possible targets of "consider". hLookup table for constructs that can be considered; the keys are the arguments the user can give to the "consider" command.   Safe-Infered notes might be added to output Use css to do the colors  -  - >  style type="text/css"  - > .hermit-syntax {  - > color: red;  - >  /style ^      !"#$%&'H      !"#$%&'H      !"#$%&'4       !"#$%&'  Safe-Infered)7like vcat and hcat, only make the list syntax explicit *7like vcat and hcat, only make the list syntax explicit ()*+()*+()*+()*+  Safe-Infered47like vcat and hcat, only make the list syntax explicit 57like vcat and hcat, only make the list syntax explicit ,-./0123456789:;<=>?,-./0123456789:;<=>?345,210/.-6789:;<=>?,210/.-3456789:;<=>? Safe-InferedA7like vcat and hcat, only make the list syntax explicit B7like vcat and hcat, only make the list syntax explicit @ABC@ABC@ABC@ABC Safe-InferedDDDD Safe-InferedEExposed debugging s. FIf the  fails, print out the , with a message. GPrint out the , with a message. H4Just say something, every time the rewrite is done. EFGHEFGHEHGFEFGH Safe-InferedPP< tries to inline a stack of bindings, stopping when reaches  the end of the stack of lets. Q6Output a list of all free variables in an expression. R#Show a human-readable version of a . S+Show a human-readable version of a list of s. X from GHC documentation: De-shadowing the program is sometimes a useful pre-pass. P It can be done simply by running over the bindings with an empty substitution, I becuase substitution returns a result that has no-shadowing guaranteed. (Actually, within a single type) there might still be shadowing, because  0 is a no-op for the empty substitution, but that's probably OK.) ['See whether an identifier is in scope. "IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij"IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij"IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij"IJKLMNOPQRSTUVWXYZ[\]^_`abcdefghij) Safe-Infered7List of the list of Ids bound by each case alternative 1list containing the single Id of the case binder @Free variables for a CoreAlt, returns a function, which accepts . the coreBndr name, before giving a result. ; This is so we can use this with congruence combinators:  caseT id (const altFreeVarsT) $  _ bndr _ fs -> [ f bndr | f <- fs ] 1All the identifiers bound in this binding group.   Safe-Inferedl+Stash a binding with a name for later use. ( Allows us to look at past definitions. m+Stash a binding with a name for later use. ( Allows us to look at past definitions. * stashDef :: String -> TranslateH Core () ! stashDef label = contextfreeT $  core ->  case core of * DefCore def -> saveDef label def : BindCore (NonRec i e) -> saveDef label (Def i e)  _ -> fail stashDef: not a binding QApply a stashed definition (like inline, but looks in stash instead of context). klmnBGet the scrutinee instead of the patten match (for case binders). 0Only succeed if this variable is a case binder. klmnklmnklmn Safe-Inferedt;The implementation of inline, an important transformation. @ This *only* works on a Var of the given name. It can trivially $ be prompted to more general cases. uOEnsure all the free variables in an expression were bound above a given depth.  Assumes minimum depth is 0. vCGet list of possible inline targets. Used by shell for completion. opqrstEInline the scrutinee instead of the patten match (for case binders). /Only inline if this variable is a case binder. uvopqrstuvopqrstuvopqrstuv Safe-Inferedwxywxywyxwxy Safe-InferedOOutput a list of all variables that shadowed by bindings in the is expression. TArguments are the original identifier and the replacement identifier, respectively. >Given an identifier to replace, and a replacement, produce an  ->  function that  acts as in identity for all Bs except the one to replace, for which it returns the replacment.  Don't export this, it' ll likely just cause confusion. FAlpha rename a lambda binder. Optionally takes a suggested new name. DAlpha rename a case binder. Optionally takes a suggested new name. _Rename the specified identifier in a case alternative. Optionally takes a suggested new name. 4Rename all identifiers bound in a case alternative. 3Rename all identifiers bound in a case expression. QAlpha rename a non-recursive let binder. Optionally takes a suggested new name. bRename the specified identifier bound in a recursive let. Optionally takes a suggested new name. 1Rename all identifiers bound in a recursive let. Rename the identifier bound in a recursive let with a single recursively bound identifier. Optionally takes a suggested new name. mRename the identifier bound in a let with a single bound identifier. Optionally takes a suggested new name. 'Rename all identifiers bound in a Let. WAlpha rename a non-recursive top-level binder. Optionally takes a suggested new name. oRename the specified identifier bound in a recursive top-level binder. Optionally takes a suggested new name. >Rename all identifiers bound in a recursive top-level binder. Rename the identifier bound in a recursive top-level binder with a single recursively bound identifier. Optionally takes a suggested new name. zRename the identifier bound in a top-level binder with a single bound identifier. Optionally takes a suggested new name. 'Rename all identifiers bound in a Let. tAlpha rename any bindings at this node. Note: does not rename case alternatives unless invoked on the alternative. z{|}~z{|}~z{|}~z{|}~ Safe-Infered A handle for a specific version of the  . A ( is a repository for Core syntax trees.  For now, operations on a  are sequential, but later # it will be possible to have two s running in parallel.  Halt the 9 and return control to GHC, which compiles the specified .  Halt the " and abort GHC without compiling. Apply a  to the specified & and return a handle to the resulting . Apply a D to the ! and return the resulting value. ,Delete the internal record of the specified .  List all the s tracked by the . IStart a HERMIT client by providing an IO function that takes the initial  and inital  handle.  The Modguts to  Modguts'/ function required by GHC Plugins is returned. * The callback is only ever called once.   Safe-Infered A handle for an $ combined with scoping information. 5An alternative HERMIT kernel, that provides scoping. )The path within the current local scope. KA primitive means of denoting navigation of a tree (within a local scope). Top Down Up Right Left *Movement confined within the local scope. Add a e to the end of a . IStart a HERMIT client by providing an IO function that takes the initial  and inital  handle.  The Modguts to  Modguts'/ function required by GHC Plugins is returned.   Safe-Infered (Externals relating to Case expressions. Bcase (let v = e1 in e2) of alts ==> let v = e1 in case e2 of alts N(case s of alt1 -> e1; alt2 -> e2) v ==> case s of alt1 -> e1 v; alt2 -> e2 v $f (case s of alt1 -> e1; alt2 -> e2) ==> $case s of alt1 -> f e1; alt2 -> f e2  Only safe if f is strict. Kcase (case s1 of alt11 -> e11; alt12 -> e12) of alt21 -> e21; alt22 -> e22  ==>  case s1 of 5 alt11 -> case e11 of alt21 -> e21; alt22 -> e22 5 alt12 -> case e12 of alt21 -> e21; alt22 -> e22 Jlet v = case ec of alt1 -> e1 in e ==> case ec of alt1 -> let v = e1 in e #Float a Case whatever the context. #Case-of-known-constructor rewrite. -Case split a free variable in an expression: *Assume expression e which mentions x :: [a] e ==> case x of x  [] -> e  (a:b) -> e FLike caseSplit, but additionally inlines the constructor applications + for each occurance of the named variable. > caseSplitInline nm = caseSplit nm >>> anybuR (inlineName nm)     Safe-Infered'Externals relating to Let expressions. -e => (let v = e in v), name of v is provided *(let v = ev in e) x ==> let v = ev in e x *f (let v = ev in e) ==> let v = ev in f e 9Float a Let through an expression, whatever the context. JNonRec v (Let (NonRec w ew) ev) : bds ==> NonRec w ew : NonRec v ev : bds &let v = ev in e ==> case ev of v -> e  Safe-Infered     Safe-Inferedf = e ==> f = fix ( f -> e) (cleanupUnfold cleans a unfold operation / (for example, an inline or rule application) + It is used at the level of the top-redex. 2Push a function through a Case or Let expression. ) Unsafe if the function is not strict.  Safe-InferedAugment a list of s by adding all of HERMIT' s primitive -s, plus any GHC RULES pragmas in the module. Create the dictionary. "The pretty-printing dictionaries.  Safe-InferedGiven a list of s, produce the   to  & function required to build a plugin. CBuild a hermit plugin. This mainly handles the per-module options.  Safe-Infered/The first argument is a list of files to load.   Safe-Infered*+,*+-*+./01223456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^_`abcdefghijklmnopqrstuvwxyz{|}~G&                                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D E F D G H I @ A B J K L M N O P Q R C@ABCCSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~            * !"#$%&'())*++,-./0123456789:;<=>?*@*A*B*C*D*E*F*G*H*I*J*K*L*M*N*O*P*Q*R*S*T*U*V*W*X*Y*Z*[*\*]*^*_*`*a*b*c*d*e*f*g*h*i*j*k*l*m*n*o*p*q*r*s*t*u*vw*vx*vy*vz*v{*v|*v}*v~*v*v*v*v*v*v*v*v********************************************************************                      ))))))))))))   hermit-0.1.1.0Language.HERMIT.KureLanguage.HERMIT.Primitive.UtilsLanguage.HERMIT.ExprLanguage.HERMIT.CoreExtraLanguage.HERMIT.ContextLanguage.HERMIT.MonadLanguage.HERMIT.ExternalLanguage.HERMIT.InterpLanguage.HERMIT.Primitive.Kure$Language.HERMIT.Primitive.NavigationLanguage.HERMIT.PrettyPrinter!Language.HERMIT.PrettyPrinter.AST#Language.HERMIT.PrettyPrinter.Clean!Language.HERMIT.PrettyPrinter.GHC"Language.HERMIT.PrettyPrinter.JSONLanguage.HERMIT.Primitive.DebugLanguage.HERMIT.Primitive.GHC Language.HERMIT.Primitive.Unfold Language.HERMIT.Primitive.InlineLanguage.HERMIT.Primitive.Fold)Language.HERMIT.Primitive.AlphaConversionLanguage.HERMIT.KernelLanguage.HERMIT.Kernel.Scoped$Language.HERMIT.Primitive.Local.Case#Language.HERMIT.Primitive.Local.LetLanguage.HERMIT.Primitive.LocalLanguage.HERMIT.Primitive.NewLanguage.HERMIT.DictionaryLanguage.HERMIT.PluginLanguage.HERMIT.Shell.CommandHERMITLanguage.HERMIT.GHCLanguage.HERMIT DictionaryLanguage.HERMIT.DicitonarybashLanguageKUREDataMap Language.HERMIT.Primitive.Common kure-2.4.0Language.KURE.Utilities fromKureMonad runKureMonad KureMonadappCountStmtHScopeHExprHAppHCmdNameSrcName numStmtsH unparseExprH unparseStmtH unparseStmtsH parseExprH parseStmtsH CoreTickishCoreDefDefCoreAltCoreExprCoreDefCoreBindCore ProgramCore ModGutsCore defToRecBindContexthermitBindings hermitDepth hermitPath hermitModGuts HermitBindingCASELAMBINDhermitBindingDepth initContext@@ addBindingaddCaseBindingaddLambdaBindingaddAltBindingslookupHermitBinding listBindingsboundIn DebugMessage DebugCore DebugTickHermitM HermitMEnv hs_debugChanDefStashLabelgetStashsendDebugMessagesaveDef lookupDefrunHM liftCoreMnewVarH newTypeVarHcloneIdH mkHermitMEnvLensHRewriteH TranslateHidRmodGutsTmodGutsRnilT consBindT consBindAllR consBindAnyR consBindOneRnonRecTnonRecRrecTrecAllRrecAnyRrecOneRdefTdefRaltTaltRvarTlitTappTappAllRappAnyRappOneRlamTlamRletTletAllRletAnyRletOneRcaseTcaseAllRcaseAnyRcaseOneRcastTcastRtickTtickRtypeT coercionTrecDefT recDefAllR recDefAnyR recDefOneR consNonRecTconsNonRecAllRconsNonRecAnyRconsNonRecOneRconsRecT consRecAllR consRecAnyR consRecOneR consRecDefTconsRecDefAllRconsRecDefAnyRconsRecDefOneR letNonRecT letNonRecAllR letNonRecAnyR letNonRecOneRletRecT letRecAllR letRecAnyR letRecOneR letRecDefT letRecDefAllR letRecDefAnyR letRecDefOneRcaseAltT caseAltAllR caseAltAnyR caseAltOneRpromoteModGutsRpromoteProgramR promoteBindR promoteDefR promoteAltR promoteExprRpromoteModGutsTpromoteProgramT promoteBindT promoteDefT promoteAltT promoteExprT StringBoxTranslateCorePathBoxNameBoxTranslateCoreCheckBoxTranslateCoreStringBoxRewriteCoreBoxIntBoxTagBoxExternBoxboxunboxExternal externName externFun externHelp externTagsTag.+remTagtagMatchTagECmdTag Experiment UnimplementedTODOBashVersionControlDebug PreConditionCommute Introduce PredicateQuery NavigationShallowDeepLoopEvalShell ExternalHelp ExternalNamedictionaryOfTags.&.||notTexternal toDictionarytoHelpInterp interpExprHinterp externalsbindingGroupOf considerNamerhsOf bindGroup namedBindingconsiderTargets considerables DebugPrettyShow2show2 PrettyState prettyPath prettyColor RenderCoderStartrEnd rDoHighlightrPutStrHTMLLaTeXUnicodeASCII RenderSpecial renderSpecial SpecialSymbol ForallSymbolTypeBindSymbol TypeSymbolRightArrowSymbol TypeOfSymbol LambdaSymbol ShowOptionOmitAbstractShow PrettyOptionspo_fullyQualified po_exprTypespo_typesForBinders po_highlightpo_depthpo_notes po_ribbonpo_widthPrettyHSyntaxForColorLitColor TypeColorVarColor SyntaxColor KeywordColorAttr SpecialFontColorPathAttr HermitMarkPopAttrPushAttrDocHattrattrPvarColor keywordColor markColor specialFontrenderSpecialFontspecialFontMap renderCodeghcCorePrettyH coreRenders latexVerbatim latexToStringlistifyvlisthlist corePrettyHRetExprRetEmptyRetAtomRetAppRetLetRetLamisAtom specialSymbolsymbolkeywordppParensatomExpr normalExpr typeSymboltypeBindSymbolobserveFailureRobserveRtraceRsubstR substExprR substTopBindR letSubstR letSubstNR safeLetSubstRsafeLetSubstPlusR freeIdsQueryshowVarshowVarsfreeIdsT freeVarsTcoreExprFreeVarscoreExprFreeIdsdeShadowBindsR rulesToEnvrulesToRewriteHinScoperulesgetHermitRules rules_helpmakeRuleaddCoreBindAsRule flattenModule mergeBindsoccurAnalyseExproccurAnalyseExprR exprEqual bindEqual coreEqual compareValuesarityOfcastEliminationstashDef stashApply getUnfolding inlineNameinlineinlineScrutineeinlineCaseBinderconfigurableInline ensureDepth inlineTargets stashFoldRfoldR visibleIds freshNameGen freshNameGenT inventNamesshadowedNamesTshadowedNamesQuery ifShadowingR renameIdR replaceIdalphaLamalphaCaseBinder alphaAltIdalphaAlt alphaCasealphaLetNonRec alphaLetRecId alphaLetRecalphaLetRecOne alphaLetOnealphaLetalphaConsNonRecalphaConsRecId alphaConsRecalphaConsRecOne alphaConsOne alphaConsalphaunshadowwrongFormForAlphaASTKernelresumeKabortKapplyKqueryKdeleteKlistK hermitKernelSAST ScopedKernelresumeSabortSapplySquerySdeleteSlistSpathSmodPathS beginScopeS endScopeS LocalPath DirectionTDURL moveLocallyextendLocalPath scopedKernel letFloatCase caseFloatApp caseFloatArg caseFloatCase caseFloatLet caseFloat caseReduce caseSplitcaseSplitInlineletIntro letFloatApp letFloatArg letFloatLet letFloatExprletFloatLetTop letToCase betaReducemultiBetaReducebetaReducePlus betaExpand etaReduce etaExpandmultiEtaExpanddceisVar simplifyRletPairR letTupleRinfo exprTypeT showExprType showIdInfocoreNodecoreConstructor testQueryfindIdfindIdMGfixIntrofixSpecializationfixSpecialization' cleanupUnfoldunfold withUnfoldpush all_externals dictionary pp_dictionary HermitPass hermitPlugin commandLineplugin name2THName ghc-7.4.1Nametemplate-haskellLanguage.Haskell.TH.SyntaxbaseGHC.BaseString id2THNameVarIdunqualifiedIdNamecmpTHName2Name cmpTHName2IdfindNameFromTHOccNameOccEnvppIdInfoTypeRepTyVarTyAppTyTyConAppFunTyForAllTy CoreArity exprArityConvertthRdrNameGuessesTysPrim alphaTyVarsTypePanicthrowGhcException ProgramError GhcExceptionCoreSynTickishCoreExprLanguage.KURE.Walker AbsolutePathHscTypesModGuts$fPathContextContext CoreMonadCoreM$fMonadThingsHermitM$fMonadUniqueHermitM$fMonadIOHermitM$fMonadCatchHermitM$fMonadHermitM$fApplicativeHermitM$fFunctorHermitM CoreProgramCoreBindAltConLiteralCoreAltCoercion$fWalkerContextHermitMExpr $fNodeExpr$fInjectionExprCore$fWalkerContextHermitM(,,) $fNode(,,)$fInjection(,,)Core$fWalkerContextHermitMCoreDef $fNodeCoreDef$fInjectionCoreDefCore$fWalkerContextHermitMBind $fNodeBind$fInjectionBindCore$fWalkerContextHermitM[]$fNode[]$fInjection[]Core$fWalkerContextHermitMModGuts $fNodeModGuts$fInjectionModGutsCore$fWalkerContextHermitMCore $fNodeCore testPathTpathTpathRrootL repeatPathL exhaustPathLpathLuniquePrunePathToT uniquePathToT prunePathsToToneNonEmptyPathToT onePathToTpathsToTrootPathabsPathT extendAbsPath rootAbsPath innermostRprunetdRonebuRonetdRanyduRanybuRanytdRallduRallbuRalltdR collectPruneTcollectTcrushbuTcrushtdTprunetdTonebuTonetdTfoldbuTfoldtdTchildRchildT hasChildThasChild numChildrenT numChildrenGenericNodeoneRanyRallRoneTallTchildLWalker contextPath PathContextPathLanguage.KURE.InjectionretractLinjectLpromoteRpromoteWithFailMsgRextractRextractWithFailMsgRpromoteTpromoteWithFailMsgTextractTretractTinjectTretractMinjectMretractinject InjectionLanguage.KURE.TranslatepureLbidirectionalL testLensTfocusTfocusRlensinvert whicheverR bidirectional sideEffectRmapTexposeTcontextTconstT contextfreeTrewrite translateapply TranslateRewrite backwardT forewardT BiTranslate BiRewritelensTLensLanguage.KURE.Combinatorsconstant forkSecond forkFirstforkswaptoSndtoFstargumentresultcatchesTandRorR>+>repeatRchangedRattemptRtryR accepterRacceptRreaderT<+unlessMwhenMifMguardMguardMsgwithPatFailMsg prefixFailMsg setFailMsg modFailMsgnotMtestMattemptMmtryMtryMcatchesM<<+catchM MonadCatchcatchTfailT CategoryCatchData.Typeable.InternalTypeable Data.DynamicDynamic $fExtern[]$fExternTranslate $fExternName$fExternTranslate0$fExternTranslate1$fExternTranslate2 $fExternInt $fExternTagE $fExtern(->) $fTagCmdTag $fTagTagE$fFunctorInterp$fRenderCodeHTML$fRenderCodeDebugPretty$fMonoidDebugPretty$fRenderSpecialDebugPretty$fRenderCodeASCII$fRenderCodeLaTeX$fShow2CoreDef $fShow2Bind $fShow2(,,) $fShow2Expr $fShow2[]$fShow2ModGuts $fShow2Core$fRenderSpecialHTML $fMonoidHTML$fRenderSpecialLaTeX $fMonoidLaTeX$fRenderSpecialUnicode$fRenderSpecialASCII $fMonoidASCII$fRenderSpecialChar$fDefaultPrettyOptions CoreSubstsubstTy caseAltVarsTcaseBinderVarT altFreeVarsT $fBindEnvBindbindings bindingVarsTletVarsT wrongExprForm$fBindEnvCoreDef $fBindEnv[] $fBindEnvExpr $fBindEnv(,,)$fShowLocalPathCommandLineOption$fRenderCodeUnicodeTerminal$fMonoidUnicodeTerminal$fRenderSpecialUnicodeTerminal$fExternShellCommand$fExternShellEffect$fExternMetaCommand$fExternQueryFun$fExternAstEffect