]r      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                  ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = >?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~!None None2Convert a variable to a neat string for printing. Converts 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-Inferred -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. &Count the total number of statements. Parse an expression. 5Parse a list of statements, seperated by semicolons.                 None 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.   NoneZThe 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. # !"#$%&'()*+,-." !"#$%&'()*+,-.!$#"% &'+()* ,-. # !$#"%&'()*+,-."None /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. /012%34567&8'9:;<=(>?@A)*+,-./0/0123456789:;<=>?@A2<=>?@76:;8345/10A9/102%34567&8'9:;<=(>?@A)*+,-./0NoneTEVA 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 1 child of a module. HTranslate an empty list. I"Translate a program of the form: (2 : 1) J0Rewrite all children of a program of the form: (2 : 1) K0Rewrite any children of a program of the form: (2 : 1) L-Rewrite one child of a program of the form: (2 : 1) 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: (3, [], ) V Rewrite the + child of a case alternative of the form: (3, , ) W%Translate an expression of the form: Var  X%Translate an expression of the form: Lit 4 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 2  `3Rewrite all children of an expression of the form: Let 2  a3Rewrite any children of an expression of the form: Let 2  b0Rewrite one child of an expression of the form: Let 2  c%Translate an expression of the form: Case    [5] d3Rewrite all children of an expression of the form: Case    [5] e3Rewrite any children of an expression of the form: Case    [5] f0Rewrite one child of an expression of the form: Case    [5] g%Translate an expression of the form: Cast  6 h Rewrite the % child of an expression of the form: Cast  6 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 6 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  ) : 1 r4Rewrite all children of an expression of the form: (NonRec  ) : 1 s4Rewrite any children of an expression of the form: (NonRec  ) : 1 t1Rewrite one child of an expression of the form: (NonRec  ) : 1 u&Translate an expression of the form: (Rec []) : 1 v4Rewrite all children of an expression of the form: (Rec []) : 1 w4Rewrite any children of an expression of the form: (Rec []) : 1 x1Rewrite one child of an expression of the form: (Rec []) : 1 y&Translate an expression of the form: (Rec [(, )]) : 1 z4Rewrite all children of an expression of the form: (Rec [(, )]) : 1 {4Rewrite any children of an expression of the form: (Rec [(, )]) : 1 |1Rewrite one child of an expression of the form: (Rec [(, )]) : 1 }%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    [(3, [], )] 3Rewrite all children of an expression of the form: Case    [(3, [], )] 3Rewrite any children of an expression of the form: Case    [(3, [], )] 0Rewrite one child of an expression of the form: Case    [(3, [], )] Promote a rewrite on ! to a rewrite on . Promote a rewrite on 1 to a rewrite on . Promote a rewrite on 2 to a rewrite on . Promote a rewrite on  to a rewrite on . Promote a rewrite on 5 to a rewrite on . Promote a rewrite on  to a rewrite on . Promote a translate on ! to a translate on . Promote a translate on 1 to a translate on . Promote a translate on 2 to a translate on . Promote a translate on  to a translate on . Promote a translate on 5 to a translate on . Promote a translate on  to a translate on . pBCDEFGH7IJKLMN8OPQRSTUVWX9YZ[\]^:_`ab;cdefghijklmnopqrstuvwxyz{|}~<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~ BCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~cDCBEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnop}~qrstuvwxyz{|pBCDEFGH7IJKLMN8OPQRSTUVWX9YZ[\]^:_`ab;cdefghijklmnopqrstuvwxyz{|}~<=>?@ABCDEFGHIJKLMNONone+*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  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. L;?!NoneAn  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 .  None None*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.    Nonenotes might be added to output Use css to do the colors  -  - >  styletype="text/css"  - > .hermit-syntax {  - > color: red;  - >  /style U      !"#$%     F      !"#$%F      !"#$%,       !"#$%      None'7like vcat and hcat, only make the list syntax explicit (7like vcat and hcat, only make the list syntax explicit &'()&'()&'()&'() None27like vcat and hcat, only make the list syntax explicit 37like vcat and hcat, only make the list syntax explicit *+,-./0123456789:;<=*+,-./0123456789:;<=123*0/.-,+456789:;<=*0/.-,+123456789:;<=None?7like vcat and hcat, only make the list syntax explicit @7like vcat and hcat, only make the list syntax explicit >?@A>?@A>?@A>?@ANoneBBBBNoneCExposed debugging s. DIf the  fails, print out the , with a message. EPrint out the , with a message. F4Just say something, every time the rewrite is done. CDEFCDEFCFEDCDEFNoneNN< tries to inline a stack of bindings, stopping when reaches  the end of the stack of lets. O6Output a list of all free variables in an expression. P#Show a human-readable version of a . Q+Show a human-readable version of a list of s. V 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.) Y'See whether an identifier is in scope. "GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh"GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh"GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh"GHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh)None7List of the list of Ids bound by each case alternative _List of the list of Ids bound by each case alternative, including the Case binder in each list 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.  !"#$% !  !"#$%Nonej+Stash a binding with a name for later use. ( Allows us to look at past definitions. k+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). &IConvert lhs of case alternative to a constructor application expression, C or a default expression in the case of the DEFAULT alternative. N Accepts a list of types to apply to the constructor before the value args.   data T a b = C a b Int  Pseudocode:  C alt2Exp (...) [a,b] (C, [x,y,z]) ==> C a b (x::a) (y::b) (z::Int) The 'K denotes whether we picked the default (scrutinee) or built an expression. # This matters for the depth check. ijklBGet the scrutinee instead of the patten match (for case binders). 0Only succeed if this variable is a case binder. &ijklijklijkl&Noner;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. sOEnsure all the free variables in an expression were bound above a given depth.  Assumes minimum depth is 0. tCGet list of possible inline targets. Used by shell for completion. mnopqrEInline the scrutinee instead of the patten match (for case binders). /Only inline if this variable is a case binder. stmnopqrstmnopqrstmnopqrstNone(ICollect arguments to function we are folding, so we can unify with them. uvw)(*+"vars that can unify with anything .alpha equivalences, wherever there is binding > note: we depend on behavior of lookup here, so new entries < should always be added to the front of the list so  we don'6t have to explicity remove them when shadowing occurs pattern we are matching on expression we are checking +mapping of vars to expressions, or failure uvwuwvuvw)(*+None~OOutput 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. xyz{|}~xyz{|}~xyz{|}~xyz{|}~None A handle for a specific version of the !. , Currently s are identified by an - label. 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. ./01,234 ./10,234NoneA 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 5 An empty . 6&Convert between path representations. *Movement confined within the local scope. Add a  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. !78569:;<=7 8569:;<=None (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. >FIf expression is a constructor application, return the relevant bits. ?We don'Lt want to use the recursive let here, so nest a bunch of non-recursive lets -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) >?   >?None '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 Blet v = (let w = ew in ev) in e ==> let w = ew in let v = ev in e @( /v1 -> let v2 = e1 in e2) ==> let v2 = e1 in (  v1 -> e2)  Fails if v1 occurs in e1. - If v1 = v2 then v1 will be alpha-renamed. 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 @A @ANone    Nonef = 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. )Abstract over a variable using a lambda.  e ==> ( x. e) x NoneAugment 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. B-Each pretty printer can suggest some options CBDEFGuniverse of commands to search tag matching predicate &means to combine the matched rewrites Huniverse of commands to search tag matching predicate help text preamble  CBDEFGHNoneGiven a list of Is, produce the ! to !& function required to build a plugin. CBuild a hermit plugin. This mainly handles the per-module options. J=Determine whether to act on this module, choose plugin pass. KLFilter options to those pertaining to this module, stripping module prefix. JKJKNoneLthe current AST Mwhich pretty printer to use N#The options for the pretty printer O#the way of outputing to the screen Phow wide is the screen? Q!keyboard input the the nav panel Rif loading a file SThe list of ticked messages TDAstEffects are things that are recorded in our log and saved files. U Adding a tag 8 | A precondition or other predicate that must not fail V4This changes the current location using a give path W3This changes the currect location using directions X8This changes the current location using a computed path Y;This applys a rewrite (giving a whole new lower-level AST) /The first argument is a list of files to load. cZ[\]^_`abLMNOPQRScdefghijklmnopqrstuvwxyz{|}~TUVWXY4Z[\`_^]a bLMNOPQRScdefghijklmqponrwvutsx|{zy}~TYXWVUNone*+,*+-*+./01223456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^^_`abcdefghijklmnopqrstuvwxyz{|}~G&                                          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ A B C D B E F G > ? @ H I J K L M N O P A>?@AAQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~               !"#$%&'()(**+,-./G01]23456789:;<(=(>(?@@(ABBCDEFGHIJKLMNOPQRSTUVWXYZ[*+\*+]*+^*+_*+`*+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*+{*+|*+}*+~*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+*+************************************************************************************            @                      ! "#$)%)&)')()))*)+),)-).)/)0)1)23456789:;<=>?@ABCDEFGHIJKLMNOPQRSTU0VWXYZ[\]^_`abcdeefghijkkllmnopqrsstuvwxyz{|}~x~ahermit-0.1.2.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.2Language.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 DebugPretty 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 withUnfoldpushabstract all_externals dictionary pp_dictionary HermitPass hermitPlugin commandLineplugin var2String name2THName ghc-7.6.1Nametemplate-haskellLanguage.Haskell.TH.SyntaxbaseGHC.BaseString id2THNameVarIdunqualifiedIdNamecmpTHName2Name cmpTHName2IdfindNameFromTHOccNameOccEnvppIdInfoshowAttributesTypeRepTyVarTyAppTyTyConAppFunTyForAllTyLitTy CoreArity exprArityConvertthRdrNameGuessesTysPrim alphaTyVarsTypePanicthrowGhcException ProgramError GhcExceptionnumStmtH InfixableExpr unparseAtomparsemanysomebind parseExprsH'parseTopExprH1 parseExprH0 parseExprH1mkAppHmkAppH'item parseTokenisId isInfixIdCoreSynTickishCoreExprLanguage.KURE.Walker AbsolutePathHscTypesModGuts$fPathContextContext CoreMonadCoreM runHermitMputStashnewName$fHasDynFlagsHermitM$fMonadThingsHermitM$fMonadUniqueHermitM$fMonadIOHermitM$fMonadCatchHermitM$fMonadHermitM$fApplicativeHermitM$fFunctorHermitM CoreProgramCoreBindAltConLiteralCoreAltCoercion consBindT'recT'appT'letT'caseT'$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.DynamicDynamictoTagEOrTagAndTagNotTag $fExtern[]$fExternTranslate $fExternName$fExternTranslate0$fExternTranslate1$fExternTranslate2 $fExternInt $fExternTagE $fExtern(->) $fTagCmdTag $fTagTagE runInterp interpExpr interpExpr' dynAppMsg$fFunctorInterphfocusRhfocusT ConsiderableCoerceTypeVarTickyCastyCaseOfLetInLambda ApplicationVariableCaseAlt DefinitionBindingrecognizedConsiderablesconsiderConstructstring2considerableunderConsideration$fRenderCodeHTML$fRenderCodeDebugPretty$fMonoidDebugPretty$fRenderSpecialDebugPretty$fRenderCodeASCII$fRenderCodeLaTeX$fRenderSpecialHTML $fMonoidHTML$fRenderSpecialLaTeX $fMonoidLaTeX$fRenderSpecialUnicode$fRenderSpecialASCII $fMonoidASCII$fRenderSpecialChar$fDefaultPrettyOptions CoreSubstsubstTy caseAltVarsTcaseAltVarsWithBinderTcaseBinderVarT altFreeVarsT $fBindEnvBindBindEnvbindings bindingVarsTletVarsT wrongExprForm$fBindEnvCoreDef $fBindEnv[] $fBindEnvExpr $fBindEnv(,,)alt2Exp Data.EitherEitherfoldArgsfoldaddAlpha foldMatchghc-prim GHC.TypesInt KernelStateMsgDoneReqfindWithErrMsgfindemptyLocalPathlocalPath2Path SASTStorelocalPaths2PathspathStackToLensget safeTakeTMVar$fShowLocalPath isDataCon nestedLets letFloatLam nonrecToRecpp_opt_dictionaryprim_externals make_help help_command layoutTxtmetaCmdmetaHelpCommandLineOption modFilter filterOpts cl_cursor cl_prettycl_pretty_opts cl_rendercl_widthcl_nav cl_loadingcl_tick AstEffect PushFocus PathfinderApplyUnicodeTerminalCompletionType AmbiguousCCommandCInlineC ConsiderC SessionStateCommandLineStatecl_graphcl_tagscl_dict cl_kernel cl_sessionCLMShellCommandBoxGotoTagGotoStepBack MetaCommandSaveFileLoadFileDumpAbortResumeQueryFunInquiryMessageDisplayQueryT ShellEffectSessionStateEffectCorrectnessCriteraEndScope BeginScope ShellCommandinterpShellCommandshell_externals showRendererschangeRenderercatchpretty showFocus iokm2clm'iokm2clmnewSASTcompletionTypecompletionQuery shellCompleteloopourCatch evalStmtsevalExprperformAstEffectperformShellEffect performQueryperformMetaCommandputStrToConsole finalRendersunicodeConsole navigation getNavCmdshowDerivationTreeshowRefactorTrail showGraph cl_kernel_envtick$fRenderCodeUnicodeTerminal$fMonoidUnicodeTerminal$fRenderSpecialUnicodeTerminal$fExternShellCommand$fExternShellEffect$fExternMetaCommand$fExternQueryFun$fExternAstEffect interactive