\t      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~          ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = > ? @ 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 v w x y z { | } ~                        !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] ^ _ ` a b!c!d!e"f"g#h#i#j#k#l#m#n#o#p#q#r#s$&% Safe-Inferredt.Chars that are valid in identifiers anywhere. uEChars that are valid in identifiers, but not as the first character. v)Chars that are valid in infix operators. tuvtuvtuvNone(Given a list of ws, produce the x to x& function required to build a plugin. )CBuild a hermit plugin. This mainly handles the per-module options. y=Determine whether to act on this module, choose plugin pass. E NB: we have the ability to stick module info in the phase info here zLFilter options to those pertaining to this module, stripping module prefix. !  !"#$%&'()yz*+  !"#$%&'()*+()'&%$#"! +*  '&%$#"! ()yz*+None,9A simple expression language AST, for things parsed from { or JSON structures. -List of expressions .Core Fragment / Application. 0Commands (to be looked up in &'). 1(Variable names (refers to source code). |.Use ghci Parser.hs to run this test function. }~,-./01|234 ,-./01234 243,10/.-y}~ ,10/.-|234None50Unlike everything else, there is no synonym for  $ provided by GHC, so we define one. 6IA (potentially recursive) definition is an identifier and an expression. 6 In GHC Core, recursive definitions are encoded as (,  ) pairs. ! This data type is isomorphic. 83A program is a telescope of nested binding groups. C That is, each binding scopes over the remainder of the program. ) In GHC Core, programs are encoded as []. ! This data type is isomorphic. 90A binding group and the program it scopes over. :An empty program. ;RCore is the sum type of all nodes in the AST that we wish to be able to traverse. <A case alternative. =An expression. >A recursive definition. ?A binding group. @5A program (a telescope of top-level binding groups). A The module. B'Get the list of bindings in a program. C)Build a program from a list of bindings. ` Note that bindings earlier in the list are considered scope over bindings later in the list. DExtract the list of identifier/'expression pairs from a binding group. E%Convert a definition to an identifier/expression pair. FVConvert a list of recursive definitions into an (isomorphic) recursive binding group. GGHC's * function throws an error if applied to a   (but, inconsistently, return a ! if applied to a type variable).  This function returns the  of a  , but otherwise behaves as . HReturns True iff the expression is a  expression at its top level. I)Count the number of nested applications. JReturn the domain/-codomain type of an endofunction expression. K?Return the domain and codomain types of a function expression. L!Check two expressions have types a -> b and b -> a , returning (a,b). 56789:;<=>?@ABCDEFGHIJKL56789:;<=>?@ABCDEFGHIJKL;A@?>=<8:9675FEBCDHGJKLI5678:9;A@?>=<BCDEFGHIJKLNone M2Convert a variable to a neat string for printing. NConverts a GHC   to a Template Haskell  , going via a {. O Converts an   to a Template Haskell  , going via a {. P&Get the unqualified name from an Var. Q8Hacks until we can find the correct way of doing these. R8Hacks until we can find the correct way of doing these. S8Hacks until we can find the correct way of doing these. T8Hacks until we can find the correct way of doing these. U=This is hopeless O(n), because the we could not generate the  s that match,  for use of the GHC  . VPretty-print an identifier. MNOPQRSTUV MNOPQRSTUVVMNOQRSTPU   MNOPQRSTUVNoneWZThe 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. X#All (important) bindings in scope. YThe depth of the bindings. ZThe $ to the current node from the root. [The x of the current module. \HERMIT''s representation of variable bindings. ]EFor case wildcard binders. We store both the scrutinised expression,  and the case alternative E (which can be converted to Constructor or Literal) and identifiers. ^.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. aCreate the initial HERMIT W by providing a x. b2Add all bindings in a binding group to a context. c2Add the bindings for a specific case alternative. d*Add a lambda bound variable to a context. B All that is known is the variable, which may shadow something.  If so, we don'@t worry about that here, it is instead checked during inlining. eAdd the variables bound by a " in a case. Like lambda bindings, F in that we know nothing about them, but all bound at the same depth,  so we cannot just fold d over the list. f0Lookup the binding for a variable in a context. g+List all the variables bound in a context. h/Determine if a variable is bound in a context. iCList all variables bound in the context that match the given name. The HERMIT context stores an " to the current node in the tree. WXYZ[\]^_`abcdefghiWXYZ[\]^_`abcdefghiWXYZ[aebcdXYZ[fghi\_^]` WXYZ[\_^]`abcdefghiNonejA message packet. k A postcard. m#The HERMIT monad is kept abstract. n'A way of sending messages to top level qA store of saved definitions. r$A label for individual definitions. s$Get the stash of saved definitions. (Replace the stash of saved definitions. u"Save a definition for future use. v&Lookup a previously saved definition. wEliminator for m. x can be lifted to m. yHMake a unique identifier for a specified type based on a provided name. zKMake a unique type variable for a specified kind based on a provided name. {This gives an new version of a  ., with the same info, and a new textual name. jklmnopqrstuvwxyz{| jklmnopqrstuvwxyz{|mwxyz{rquvsnopjlk|tjlkmnopqrstuvwxyz{| NoneTTranslate a module. H Slightly different to the other congruence combinators: it passes in all1 of the original to the reconstruction function.  Rewrite the 8 child of a module. Translate an empty list. "Translate a program of the form: ( : 8) 0Rewrite all children of a program of the form: ( : 8) 0Rewrite any children of a program of the form: ( : 8) -Rewrite one child of a program of the form: ( : 8) 'Translate a binding group of the form: NonRec     Rewrite the ' child of a binding group of the form: NonRec    'Translate a binding group of the form: Rec [6] 5Rewrite all children of a binding group of the form: Rec [6] 5Rewrite any children of a binding group of the form: Rec [6] 2Rewrite one child of a binding group of the form: Rec [6] .Translate a recursive definition of the form: Def    Rewrite the . child of a recursive definition of the form: Def   +Translate a case alternative of the form: (, [ ], )  Rewrite the + child of a case alternative of the form: (, , ) %Translate an expression of the form: Var  %Translate an expression of the form: Lit ! %Translate an expression of the form: App   3Rewrite 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   3Rewrite any children of an expression of the form: Let   0Rewrite one child of an expression of the form: Let   %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     ["] %Translate an expression of the form: Cast    Rewrite the % child of an expression of the form: Cast   %Translate an expression of the form: Tick 5   Rewrite the % child of an expression of the form: Tick 5  %Translate an expression of the form: Type   %Translate an expression of the form: Coercion  'Translate a binding group of the form: Rec [(, )] 5Rewrite all children of a binding group of the form: Rec [(, )] 5Rewrite any children of a binding group of the form: Rec [(, )] 2Rewrite one child of a binding group of the form: Rec [(, )] "Translate a program of the form: (NonRec   ) : 8 4Rewrite all children of an expression of the form: (NonRec   ) : 8 4Rewrite any children of an expression of the form: (NonRec   ) : 8 1Rewrite one child of an expression of the form: (NonRec   ) : 8 &Translate an expression of the form: (Rec [6]) : 8 4Rewrite all children of an expression of the form: (Rec [6]) : 8 4Rewrite any children of an expression of the form: (Rec [6]) : 8 1Rewrite one child of an expression of the form: (Rec [6]) : 8 &Translate an expression of the form: (Rec [(, )]) : 8 4Rewrite all children of an expression of the form: (Rec [(, )]) : 8 4Rewrite any children of an expression of the form: (Rec [(, )]) : 8 1Rewrite one child of an expression of the form: (Rec [(, )]) : 8 %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 [6])  3Rewrite all children of an expression of the form: Let (Rec [6])  3Rewrite any children of an expression of the form: Let (Rec [6])  0Rewrite one child of an expression of the form: Let (Rec [6])  %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 x to a rewrite on ;. Promote a rewrite on 8 to a rewrite on ;. Promote a rewrite on  to a rewrite on ;. Promote a rewrite on 6 to a rewrite on ;. Promote a rewrite on " to a rewrite on ;. Promote a rewrite on  to a rewrite on ;. #Promote a bidirectional rewrite on  to a bidirectional rewrite on ;. Promote a translate on x to a translate on ;. Promote a translate on 8 to a translate on ;. Promote a translate on  to a translate on ;. Promote a translate on 6 to a translate on ;. Promote a translate on " to a translate on ;. Promote a translate on  to a translate on ;. a}~#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~}~X~}a}~#$%&'()*+None,*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. FCommands that are either not type safe (may cause core lint to fail), ' or allow behavior-altering changes. 0A command that uses its context, such as 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 d or p 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. \     G     K     *      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  +Language constructs that can be zoomed to. .*s involving navigating to named entities. /AFind the path to the RHS of the binding group of the given name. 06Find the path to the definiiton of the provided name. 1>Find the path to the RHS of the definition of the given name. 2=Verify that this is a binding group defining the given name. 36Verify that this is the definition of the given name. 4=Find the names of all the variables that could be targets of "consider". 5hLookup table for constructs that can be considered; the keys are the arguments the user can give to the "consider" command. 6 Find the d" to the first matching construct.  !"#$%&'()*+,-./0123456 !"#$%&'()*+,-./0123456.23/014 -,+*)('&%$#"!56 -,+*)('&%$#"!./0123456 Nonecnotes might be added to output 7like vcat and hcat, only make the list syntax explicit 7like vcat and hcat, only make the list syntax explicit Use css to do the colors  -  - >  styletype="text/css"  - > .hermit-syntax {  - > color: red;  - >  /style h789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~X789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~Xzwxyuvrtsnqpogmlkjih{|}~f[\]^_`abcdeVZYXWLUTSRQPONMJKHIFGDEBC=>?@A9:;<786789:;<=>?@ABCDEFGHIJKL UTSRQPONMVZYXW[ \]^_`abcdefgmlkjihnqportsuvwxyz{|}~ None0Pretty print a fragment of GHC Core using HERMIT's "AST" pretty printer. D This displays the tree of constructors using nested indentation. None0Pretty print a fragment of GHC Core using HERMIT's "Clean" pretty printer.           None/This pretty printer is just a reflection of GHC's standard pretty printer. NoneExposed debugging s. If the  fails, print out the ;, with a message. Print out the ;, with a message. 4Just say something, every time the rewrite is done. NoneIExternals that reflect GHC functions, or are derived from GHC functions. cSubstitute all occurrences of a variable with an expression, in either a program or an expression. OSubstitute all occurrences of a variable with an expression, in an expression. KSubstitute all occurrences of a variable with an expression, in a program. (let x = e1 in e2) ==> (e2[e1/x]),  x must not be free in e1. =This is quite expensive (O(n) for the size of the sub-tree). < tries to inline a stack of bindings, stopping when reaches  the end of the stack of lets. 6Output a list of all free variables in an expression. +Show a human-readable version of a list of  s. Lifted version of . Lifted version of . =List all free variables (including types) in the expression. JList all free identifiers (value-level free variables) in the expression. cThe free variables in a case alternative, which excludes any identifiers bound in the alternative.  A variant of X that returns a function that accepts the case wild-card binder before giving a result. H This is so we can use this with congruence combinators, for example:  caseT id (const altFreeVarsT) $  _ wild _ fvs -> [ f wild | f <- fvs ]  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.) -Determine whether an identifier is in scope. @Lookup a rule and attempt to construct a corresponding rewrite. /Performs dependency anlaysis on an expression. l This can be useful to simplify a non-recursive recursive binding group to a non-recursive binding group. Lifted version of   .Try to figure out the arity of an identifier. Run the Core Lint typechecker. ' Fails on errors, with error messages.  Succeeds returning warnings. LNote: this can miss several things that a whole-module core lint will find. N For instance, running this on the RHS of a binding, the type of the RHS will U not be checked against the type of the binding. Running on the whole let expression  will catch that however. (!"#$%&'()*+ (!"#$%&'()*+ None A handle for a specific version of the x. , Currently s are identified by an - label. A 1 is a repository for complete Core syntax trees (x).  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  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 d to the end of a . 7oEnsures that the TMVar is replaced when an error is thrown, and all exceptions are lifted into KureM failures. 8&Lifts exceptions into KureM failures. 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. $9:56;<=78>9 :56;<=78>None:Apply a transformation to a value in the current context. Lift GHC's collectArgs ?Succeeds if we are looking at an application of given function < returning zero or more arguments to which it is applied. ?Succeeds if we are looking at a fully saturated function call. ?Succeeds if we are looking at an application of given function DSucceeds if we are looking at an application of a data constructor. JSucceeds if we are looking at an application of a named data constructor. bApply a rewrite to all applications of a given function in a top-down manner, pruning on success. PApply a translate to all applications of a given function in a top-down manner, / pruning on success, collecting the results. :List all identifiers bound at the top-level in a program. VList the identifiers bound by the top-level binding group at the head of the program. ^List the identifiers bound by a recursive top-level binding group at the head of the program. ]Return the identifier bound by a non-recursive top-level binding at the head of the program. -List all variables bound in a binding group. =Return the variable bound by a non-recursive let expression. 9List all identifiers bound in a recursive binding group. 7Return the identifier bound by a recursive definition. 2Return the variable bound by a lambda expression. .List the variables bound by a let expression. :List the identifiers bound by a recursive let expression. =Return the variable bound by a non-recursive let expression. ]List all variables bound by a case expression (in the alternatives and the wildcard binder). !Return the case wildcard binder. CList the variables bound by all alternatives in a case expression. 0List the variables bound by a case alternative. Lifted version of g. hFind the unique variable bound in the context that matches the given name, failing if it is not unique. Lookup the name in the W" first, then, failing that, in GHC's global reader environment. #Constructs a common error message.  Argument {/ should be the desired form of the expression. 5Determine if a list contains no duplicated elements. #?@!!#?@NoneExternals for alpha-renaming. AList all visible identifiers (in the expression or the context). 4If a name is provided replace the string with that, . otherwise modify the string making sure to not# clash with any visible variables. oUse the optional argument if given, otherwise generate a new name avoiding clashes with the list of variables. AdInvent a new String based on the old one, but avoiding clashing with the given list of identifiers. BTRemove all variables from the first list that shadow a variable in the second list. CLifted version of B. 3 Additionally, it fails if no shadows are found. FRename local variables with manifestly unique names (x, x0, x1, ...). * Does not rename top-level definitions. 1Replace all occurrences of a specified variable. U Arguments are the variable to replace and the replacement variable, respectively. D:Given a variable to replace, and a replacement, produce a   ->   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. EIGiven a lists of variables to replace, and their replacements, produce a   ->   function that  acts as in identity for all  Cs except the ones 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. F]Rename the specified variable in a case alternative. Optionally takes a suggested new name. G`Rename the specified variables in a case alternative, using the suggested names where provided. YRename the variables bound in a case alternative with the given list of suggested names. 6Rename the specified variables in a case alternative. 4Rename all identifiers bound in a case alternative. 3Rename all identifiers bound in a case expression. HQAlpha rename a non-recursive let binder. Optionally takes a suggested new name. I~Alpha rename a non-recursive let binder if the variable appears in the argument list. Optionally takes a suggested new name. JbRename the specified identifier bound in a recursive let. Optionally takes a suggested new name. K_Rename the specified identifiers in a recursive let, using the suggested names where provided. NRename the identifiers bound in a Let with the given list of suggested names. /Rename the specified variables bound in a let. 'Rename all identifiers bound in a Let. LWAlpha rename a non-recursive top-level binder. Optionally takes a suggested new name. MoRename the specified identifier bound in a recursive top-level binder. Optionally takes a suggested new name. NRename the specified identifiers in a recursive top-level binding at the head of a program, using the suggested names where provided. yRename the identifiers bound in the top-level binding at the head of the program with the given list of suggested names. tAlpha rename any bindings at this node. Note: does not rename case alternatives unless invoked on the alternative. ABCDEFGHIJKLMNO ABCDEFGHIJKLMNONone s for inlining variables. @If the current variable matches the given name, then inline it. Inline the current variable. tInline the current variable, using the scrutinee rather than the case alternative if it is a case wild-card binder. DIf the current variable is a case wild-card binder, then inline it. P;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. QOEnsure all the free variables in an expression were bound above a given depth.  Assumes minimum depth is 0. RIConvert 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 SK denotes whether we picked the default (scrutinee) or built an expression. # This matters for the depth check. CGet list of possible inline targets. Used by shell for completion. T%Build a CoreExpr for a DFunUnfolding PEInline the scrutinee instead of the patten match (for case binders). /Only inline if this variable is a case binder. QBGet the scrutinee instead of the patten match (for case binders). 0Only succeed if this variable is a case binder. RT PQRTNone    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             UVWNone)cleanupUnfoldR cleans a unfold operation / (for example, an inline or rule application) + It is used at the level of the top-redex. , Invariant: will not introduce let bindings A more powerful . Matches two cases:  Var ==> inlines E App ==> inlines the head of the function call for the app tree +Stash a binding with a name for later use. ( Allows us to look at past definitions. +Stash a binding with a name for later use. ( Allows us to look at past definitions. + rememberR :: String -> TranslateH Core () " rememberR label = contextfreeT $  core ->  case core of * DefCore def -> saveDef label def : BindCore (NonRec i e) -> saveDef label (Def i e)  _ -> fail remember: not a binding QApply a stashed definition (like inline, but looks in stash instead of context).        NoneX.Chars that are valid in identifiers anywhere. YEChars that are valid in identifiers, but not as the first character. Z)Chars that are valid in infix operators. }[\]^_`abcdefghijklmnopqrstuvwxyz{|}~XYZX[\]^_`a!~}|{zyxwvutsrqponmlkjihgfedcbXYZNone (Externals relating to Case expressions. 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 Hlet v = case s of alt1 -> e1 in e ==> case s of alt1 -> let v = e1 in e 8cast (case s of p -> e) co ==> case s of p -> cast e co #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)  !"#$%&' !"#$%&' !"#%$&' !"#$%&'None((Externals relating to Case expressions. ()*+,()*+,()*+,()*+,None-'Externals relating to Let expressions. .-e => (let v = e in v), name of v is provided 0,Remove an unused non-recursive let binding. 4 (let v = E1 in E2) => E2, if v is not free in E2 1?Remove all unused recursive let bindings in the current group. 2&let v = ev in e ==> case ev of v -> e 3*(let v = ev in e) x ==> let v = ev in e x 4*f (let v = ev in e) ==> let v = ev in f e 5Blet v = (let w = ew in ev) in e ==> let w = ew in let v = ev in e 6( /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. 7Gcase (let bnds in e) of wild alts ==> let bnds in (case e of wild alts) # Fails if any variables bound in bnds occurs in alts. 8 1cast (let bnds in e) co ==> let bnds in cast e co99Float a Let through an expression, whatever the context. : NonRec v (Let (NonRec w ew) ev) 9 p ==> NonRec w ew 9 NonRec v ev 9 p ?:Re-order a sequence of nested non-recursive let bindings. S The argument list should contain the let-bound variables, in the desired order. -./0123456789:;<=>?-./0123456789:;<=>?-/.3456789:012;=<>?-./0123456789:;<=>?None @.Externals for local structural manipulations. - (Many taken from Chapter 3 of Andre Santos' dissertation.) ANonRec v e ==> Rec [Def v e] B((\% v -> e1) e2) ==> (let v = e2 in e1) = This form of beta-reduction is safe if e2 is an arbitrary  expression (won't duplicate work). C%Perform one or more beta-reductions. D(let v = e1 in e2) ==> (\ v -> e2) e1 E(\ v -> e1 v) ==> e1 Fe1 ==> (\ v -> e1 v) G!Perform multiple eta-expansions. H\Flatten all the top-level binding groups in the module to a single recursive binding group. IpFlatten all the top-level binding groups in a program to a program containing a single recursive binding group. J[Flatten all the top-level binding groups in a program to a single recursive binding group. K)Abstract over a variable using a lambda.  e ==> ( x. e) x @ABCDEFGHIJK0 !"#$%&')*+,./0123456789:;<=>?@ABCDEFGHIJK @KABCDEFGHIJ @ABCDEFGHIJKNoneP8Combine nested non-recursive lets into case of a tuple. T2Push a function through a Case or Let expression. ) Unsafe if the function is not strict. LMNOPQRSTUVWX LMNOPQRSTUVWX LMNOPQRSTUVWX LMNOPQRSTUVWXNoneY;Externals for manipulating fixed points, and for the worker/wrapper transformation. Zf = e ==>  f = fix (\ f -> e) [fix ty f <==>  f (fix ty f) \ fix tyA (\ a -> f (g a)) <==>  f (fix tyB (\ b -> g (f b)) For any  f :: a -> a , and given wrap :: b -> a and unwrap :: a -> b as arguments, then   fix tyA f <==> wrap (fix tyB (\ b -> unwrap (f (wrap b)))) For any  f :: a -> a , and given wrap :: b -> a and unwrap :: a -> b as arguments, then   fix tyA f <==> wrap (fix tyB (\ b -> unwrap (f (wrap b)))) Given wrap :: b -> a, unwrap :: a -> b and  work :: b as arguments, then  unwrap (wrap work) <==> work Given wrap :: b -> a, unwrap :: a -> b and  work :: b as arguments, then  unwrap (wrap work) <==> work \ wrap unwrap -> (g = expr ==>  g = let f = \= g -> expr in let work = unwrap (f (wrap work)) in wrap work) \ wrap unwrap -> (g = expr ==>  g = let f = \= g -> expr in let work = unwrap (f (wrap work)) in wrap work) As 5 but performs the static-argument transformation for n\ type paramaters first, providing these types as arguments to all calls of wrap and unwrap. E This is useful if the expression, and wrap and unwrap, all have a forall type. wrap (unwrap x) <==> x wrap (unwrap x) <==> x wrap (unwrap (f x)) <==> f x wrap (unwrap (f x)) <==> f x fix t ( x -> wrap (unwrap (f x))) <==> fix t f fix t ( x -> wrap (unwrap (f x))) <==> fix t f 'Check that the expression has the form fix t (f :: t -> t) , returning t and f. f ==> fix f YZ[\YZ[\YZ[\YZ[\ None]A ] is a collection of s.  Looking up a  (via a {/ key) returns a list, as there can be multiple s with the same name. ^Augment a list of s by adding all of HERMIT' s primitive -s, plus any GHC RULES pragmas in the module. _#Create a dictionary from a list of s. `"The pretty-printing dictionaries. ]^_`auniverse of commands to search tag matching predicate &means to combine the matched rewrites universe of commands to search tag matching predicate help text preamble ]^_`a]^_`a ]^_`a!Nonethe current AST which pretty printer to use #The options for the pretty printer #the way of outputing to the screen how wide is the screen? !keyboard input the the nav panel if loading a file The list of ticked messages 4if true, run core lint on module after each rewrite  if true, abort on *any* failure DAstEffects are things that are recorded in our log and saved files.  Adding a tag 8 | A precondition or other predicate that must not fail 3This changes the currect location using directions 8This changes the current location using a computed path ;This applys a rewrite (giving a whole new lower-level AST) b/The first argument is a list of files to load. k      !"#$%&'()*+,-./0123456789:;<=>bc?@ABCDEFGHdIJKLMNOPQRSTUVWbcdbcd8      $#"! %&)('*.-,+/0123456789:;<=>bc?@ABCDEFGHdIJKLMNOPQRSTUVW- Safe-Inferred XYZ[\]^_`abY^_`ab XYZ[\]^_`ab" Safe-Inferredefefefef#Nonecdefghijklmnopgqhijrklmnopqr ghijklmnopqr gjihpqrklmnocdefghijkponmlgqhijrklmnopqr$Nonesssss./0./1./2./3./4./5.67.89.:;./<.=>.=?.=@AABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~          !"#$%&'()*+,-./01234*56789:;<=>? @ A B C D E F G H I J K L M N O P Q C R S T U V W X Y Z Z [ [ \ ] ^ _ ` a b c c d d e e f f g h i j k l m n o p q r s t u v w x x y z { | } ~                                             CCC     CCC !"#$%&'(C)*+,-./0123456C789:C;<=>?@ABCDEFGHIJKLCMNOPQRSTUVWCXYZ[\]^_`abcCdef ' g h i j!k!l!m"n"o#p#l#q#r#s#t#u#v#w#x#y#z${%|%}%~..   .  . . . ../t...  ... . .!"#$%&'()*+.MM. ,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopoqorosotouovowoxoyozo{|}|~|||||||||||||||||||||| @                              !"#$%&'()*+,.-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefgh|}~ijklmnopqrstuvwxyz{|}~       !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!1!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!---- - - - - ---############6#0###hermit-0.1.8.0Language.HERMIT.GHCLanguage.HERMIT.PluginLanguage.HERMIT.ParserLanguage.HERMIT.CoreLanguage.HERMIT.ContextLanguage.HERMIT.MonadLanguage.HERMIT.KureLanguage.HERMIT.ExternalLanguage.HERMIT.InterpLanguage.HERMIT.Primitive.Kure$Language.HERMIT.Primitive.Navigation$Language.HERMIT.PrettyPrinter.Common!Language.HERMIT.PrettyPrinter.AST#Language.HERMIT.PrettyPrinter.Clean!Language.HERMIT.PrettyPrinter.GHCLanguage.HERMIT.Primitive.DebugLanguage.HERMIT.Primitive.GHCLanguage.HERMIT.KernelLanguage.HERMIT.Kernel.Scoped Language.HERMIT.Primitive.Common)Language.HERMIT.Primitive.AlphaConversion Language.HERMIT.Primitive.InlineLanguage.HERMIT.Primitive.Fold Language.HERMIT.Primitive.UnfoldLanguage.HERMIT.ParserCore$Language.HERMIT.Primitive.Local.Case$Language.HERMIT.Primitive.Local.Cast#Language.HERMIT.Primitive.Local.LetLanguage.HERMIT.Primitive.LocalLanguage.HERMIT.Primitive.New"Language.HERMIT.Primitive.FixPointLanguage.HERMIT.DictionaryLanguage.HERMIT.Shell.Command HERMIT.DriverLanguage.HERMIT.OptimizeHERMITLanguage.HERMIT.SyntaxLanguage.HERMIT DictionarybashLanguageKUREDataMap Paths_hermit ghc-7.6.2TypeRepTyVarTyAppTyTyConAppFunTyForAllTyLitTy CoreArity exprArityConvertthRdrNameGuessesTysPrim alphaTyVarsTypePanicthrowGhcException ProgramError GhcException PhaseInfophaseNum phasesDone phasesLeftCorePassUnknownNoOp PluginPassPasses RuleCheck FloatOutwardsSimplifyPrepTidy DesugarOptDesugar VectorisationCSE SpecConstr Specialising WorkerWrapper Strictness StaticArgs PrintCore LiberateCase FloatInwards HermitPass hermitPlugin ghcPasses getCorePassExprHListHCoreHAppHCmdNameSrcName parseStmtsH numStmtsH unparseExprH CoreTickishCoreDefDefCoreProgProgConsProgNilCoreAltCoreExprCoreDefCoreBindCoreProgCoreGutsCore progToBinds bindsToProg bindToIdExprs defToIdExpr defsToRecBindexprTypeOrKindisCoArgappCount endoFunTypefunArgResTypesfunsWithInverseTypes var2String name2THName var2THNameunqualifiedVarNamecmpTHName2NamecmpString2Name cmpTHName2Var cmpString2VarfindNameFromTHppIdInfoHermitChermitBindings hermitDepth hermitPath hermitModGuts HermitBindingCASELAMBINDhermitBindingDepth initHermitC addBindingaddCaseBindingaddLambdaBindingaddAltBindingslookupHermitBinding boundVarsboundIn findBoundVars DebugMessage DebugCore DebugTickHermitM HermitMEnv hs_debugChanDefStashLabelgetStashsendDebugMessagesaveDef lookupDefrunHM liftCoreMnewIdH newTyVarH cloneVarH mkHermitMEnvLensH BiRewriteHRewriteH TranslateHmodGutsTmodGutsRprogNilT progConsT progConsAllR progConsAnyR progConsOneRnonRecTnonRecRrecTrecAllRrecAnyRrecOneRdefTdefRaltTaltRvarTlitTappTappAllRappAnyRappOneRlamTlamRletTletAllRletAnyRletOneRcaseTcaseAllRcaseAnyRcaseOneRcastTcastRtickTtickRtypeT coercionTrecDefT recDefAllR recDefAnyR recDefOneR consNonRecTconsNonRecAllRconsNonRecAnyRconsNonRecOneRconsRecT consRecAllR consRecAnyR consRecOneR consRecDefTconsRecDefAllRconsRecDefAnyRconsRecDefOneR letNonRecT letNonRecAllR letNonRecAnyR letNonRecOneRletRecT letRecAllR letRecAnyR letRecOneR letRecDefT letRecDefAllR letRecDefAnyR letRecDefOneRcaseAltT caseAltAllR caseAltAnyR caseAltOneRpromoteModGutsR promoteProgR promoteBindR promoteDefR promoteAltR promoteExprRpromoteExprBiRpromoteModGutsT promoteProgT promoteBindT promoteDefT promoteAltT promoteExprT StringListBox NameListBox StringBoxCoreBox CoreString unCoreStringTranslateCorePathBoxNameBoxTranslateCoreCheckBoxTranslateCoreStringBoxBiRewriteCoreBoxRewriteCoreBoxIntBoxTagBoxExternBoxboxunboxExternal externName externFun externHelp externTagsTag.+remTagtagMatchTagECmdTag Experiment UnimplementedTODOUnsafeContextBashVersionControlDebug PreConditionCommute Introduce PredicateQuery NavigationShallowDeepLoopEvalShell ExternalHelp ExternalNamedictionaryOfTags.&.||notTexternal toDictionarytoHelpInterp interpExprHinterp externals ConsiderableCoerceTypeVarTickyCastyCaseOfLetInLambda ApplicationLiteralVariableCaseAlt DefinitionBindingbindingGroupOf considerNamerhsOf bindGroup namedBindingconsiderTargets considerablesconsiderConstructT DebugPretty PrettyState prettyPath prettyColor RenderCoderStartrEnd rDoHighlightrPutStrHTMLLaTeXUnicodeASCII RenderSpecial renderSpecial SpecialSymbol ForallSymbolTypeBindSymbol TypeSymbolCoercionBindSymbolCoercionSymbol CastSymbolRightArrowSymbol TypeOfSymbol LambdaSymbol ShowOptionKindOmitAbstractShow PrettyOptionspo_fullyQualified po_exprTypes po_coercionspo_typesForBinders po_highlightpo_depthpo_notes po_ribbonpo_widthPrettyHSyntaxForColorLitColor TypeColor CoercionColorIdColor SyntaxColor KeywordColorAttr SpecialFontColorPathAttr HermitMarkPopAttrPushAttrTranslateCoreDocHBox TranslateDocHunTranslateDocHDocHattrattrPidColor typeColor coercionColor keywordColor markColor specialFontupdateTypeShowOptionupdateCoShowOptionrenderSpecialFontspecialFontMap renderCodeghcCorePrettyH coreRenders latexVerbatim latexToStringlistifyvlisthlist corePrettyHobserveFailureRobserveRtraceRsubstR substExprR letSubstR safeLetSubstRsafeLetSubstPlusRshowVarsfreeIdsT freeVarsTcoreExprFreeVarscoreExprFreeIds altFreeVarsTaltFreeVarsExclWildTinScoperulerules exprEqual exprsEqual equivalent coreEqual lintModuleT lintProgramT lintExprTASTKernelresumeKabortKapplyKqueryKdeleteKlistK hermitKernelSAST ScopedKernelresumeSabortSapplySquerySdeleteSlistSpathSmodPathS beginScopeS endScopeSkernelStoASTS LocalPath DirectionTDURL moveLocallyextendLocalPath scopedKernelapplyInContextTcallT callPredT callNameTcallSaturatedT callNameG callDataConTcallDataConNameTcallsRcallsTprogIdsTconsIdsT consRecIdsT consNonRecIdT bindVarsT nonRecVarTrecIdsTdefIdTlamVarTletVarsT letRecIdsT letNonRecVarT caseVarsT caseWildIdT caseAltVarsTaltVarsT boundVarsT findBoundVarTfindIdTfindId wrongExprFormnodupsmapAlts visibleVarsT freshNameGenTfreshNameGenAvoidingunshadow replaceVarRalphaLamalphaCaseBinder alphaAltWith alphaAltVarsalphaAlt alphaCase alphaLetWith alphaLetVarsalphaLet alphaConsWithalpha inlineNameinlineinlineScrutineeinlineCaseBinder getUnfolding inlineTargets stashFoldR stashFoldAnyRfoldRcleanupUnfoldRunfoldR unfoldPredR unfoldNameR unfoldAnyRunfoldSaturatedR specializeR rememberR unfoldStashR showStashT parseCore caseFloatApp caseFloatArg caseFloatCase caseFloatLet caseFloatCast caseFloat caseUnfloatcaseUnfloatAppcaseUnfloatArgs caseReducecaseReduceLiteralcaseReduceDatacon caseSplitcaseSplitInline castElimRefl castElimSym castFloatAppcastElimSymPlusletIntroletElim letNonRecElim letRecElim letToCase letFloatApp letFloatArg letFloatLet letFloatLam letFloatCase letFloatCast letFloatExprletFloatLetTop letUnfloatletUnfloatCase letUnfloatApp letUnfloatLamreorderNonRecLets nonrecToRec betaReducebetaReducePlus betaExpand etaReduce etaExpandmultiEtaExpand flattenModuleflattenProgramRflattenProgramTabstractisVar simplifyR collectLets letTupleR staticArg testQueryanyCallRpushparseCoreExprT unsafeReplaceunsafeReplaceStash inlineAllfixIntrofixComputationRule rollingRule all_externals dictionary pp_dictionarymetaCmd commandLine interactiveunicodeConsolehermit_versionghcFlagsoptimizerunqueryatphaseafterbefore allPhasesdisplay setPrettysetPrettyOptionsplugin isIdFirstCharisIdChar isInfixId CoreMonadCommandLineOptionHscTypesModGuts modFilter filterOptsbaseGHC.BaseStringtest HappyAddrHappyA#HappyStk Happy_IntList HappyConsTokenInfixOpIdentQuoteTickStmtEndListEnd ListDelim ListStartScopeEnd ScopeStart ParenRight ParenLeftHappyAny HappyAbsSynhappyIn4 happyOut4happyIn5 happyOut5happyIn6 happyOut6happyIn7 happyOut7happyIn8 happyOut8happyIn9 happyOut9 happyIn10 happyOut10 happyIn11 happyOut11 happyInTok happyOutTokhappyActOffsetshappyGotoOffsetshappyDefActions happyCheck happyTablehappyReduceArr happy_n_termshappy_n_nonterms happyReduce_1happyReduction_1 happyReduce_2happyReduction_2 happyReduce_3happyReduction_3 happyReduce_4happyReduction_4 happyReduce_5happyReduction_5 happyReduce_6happyReduction_6 happyReduce_7happyReduction_7 happyReduce_8happyReduction_8 happyReduce_9happyReduction_9happyReduce_10happyReduction_10happyReduce_11happyReduction_11happyReduce_12happyReduction_12happyReduce_13happyReduction_13happyReduce_14happyReduction_14happyReduce_15happyReduction_15happyReduce_16happyReduction_16happyReduce_17happyReduction_17happyReduce_18happyReduction_18happyReduce_19happyReduction_19happyReduce_20happyReduction_20happyReduce_21happyReduction_21happyReduce_22happyReduction_22happyReduce_23happyReduction_23happyReduce_24happyReduction_24happyReduce_25happyReduction_25 happyNewToken happyError_ happyThen happyReturn happyThen1 happyReturn1 happyError'parserhappySeq parseErrorlexer lexStringlexCore unparseAtom happyParse happyAccept happyDoActionindexShortOffAddr happyShifthappySpecReduce_0happySpecReduce_1happySpecReduce_2happySpecReduce_3 happyReducehappyMonadReducehappyMonad2Reduce happyDrop happyDropStk happyGoto happyFail notHappyAtAll happyTcHack happyDoSeq happyDontSeqCoreSynTickishVarIdCoreExprCoreBind CoreUtilsexprTypeCoercionNametemplate-haskellLanguage.Haskell.TH.SyntaxOccNameOccEnvshowAttributes kure-2.6.22Language.KURE.Walker AbsolutePathAltConDataCon$fPathContextHermitCputStashCoreM runHermitMnewName$fHasDynFlagsHermitM$fMonadThingsHermitM$fMonadUniqueHermitM$fMonadIOHermitM$fMonadCatchHermitM$fMonadHermitM$fApplicativeHermitM$fFunctorHermitMCoreAlt<$><*>$fWalkerHermitCCore$fInjectionExprCore$fInjection(,,)Core$fInjectionCoreDefCore$fInjectionBindCore$fInjectionCoreProgCore$fInjectionModGutsCoresummandIsTypeT oneLargestT allLargestT oneLargestR anyLargestR allLargestR testPathTpathTpathRrootL repeatPathL exhaustPathLpathLuniquePrunePathToT uniquePathToT prunePathsToToneNonEmptyPathToT onePathToTpathsToT rootPathTrootPathabsPathT rootAbsPath innermostRprunetdRonebuRonetdRanyduRanybuRanytdRallduRallbuRalltdR collectPruneTcollectTcrushbuTcrushtdTprunetdTonebuTonetdTfoldbuTfoldtdTchildRchildT hasChildT numChildrenTchildLoneRanyRoneTallTallRWalker@@absPath PathContextPathLanguage.KURE.LensprojectLinjectLpureLbidirectionalLcatchLfailL testLensTfocusTfocusRlenslensTLens#Language.KURE.Combinators.Translate unwrapOneRwrapOneR unwrapAnyRwrapAnyRguardTjoinTcatchesTrepeatRchangedRtryR accepterRacceptRorR>+>andRresultTreaderT sideEffectRmapTexposeTcontextTidRAnyROneRLanguage.KURE.BiTranslate beforeBiR invertBiT whicheverR bidirectional backwardT forewardT BiTranslate BiRewriteLanguage.KURE.InjectionpromoteRpromoteWithFailMsgRextractRextractWithFailMsgRpromoteTpromoteWithFailMsgTextractTprojectTinjectTprojectMprojectWithFailMsgMinjectMprojectinject InjectionLanguage.KURE.TranslateconstT contextonlyT contextfreeTrewrite translateapply TranslateRewriteLanguage.KURE.MonadCatchwithPatFailMsg prefixFailMsg setFailMsg modFailMsgnotMtestMattemptMmtryMtryMcatchesM<+ fromKureMrunKureMcatchM MonadCatchKureMLanguage.KURE.Combinators.MonadunlessMwhenMifM guardMsgMguardMguardMsgLanguage.KURE.Combinators.Arrow parallelise serialiseconstant forkSecond forkFirstforkswaptoSndtoFstargumentresultData.Typeable.InternalTypeable Data.DynamicDynamictoTagEOrTagAndTagNotTag $fExtern[] $fExtern[]0 $fExtern[]1$fExternCoreString$fExternTranslate $fExternName$fExternTranslate0$fExternTranslate1$fExternBiTranslate$fExternTranslate2 $fExternInt $fExternTagE $fExtern(->) $fTagCmdTag $fTagTagE runInterp interpExpr fromDynList toBoxedList interpExpr' dynAppMsg$fFunctorInterphfocusRhfocusTrecognizedConsiderablesconsiderConstructstring2considerableunderConsideration$fRenderCodeHTML$fRenderCodeDebugPretty$fMonoidDebugPretty$fRenderSpecialDebugPretty$fRenderCodeASCII$fRenderCodeLaTeX$fRenderSpecialHTML $fMonoidHTML$fRenderSpecialLaTeX $fMonoidLaTeX$fRenderSpecialUnicode$fRenderSpecialASCII $fMonoidASCII$fRenderSpecialChar$fDefaultPrettyOptions$fExternTranslateDocHRetExprRetEmptyRetAtomRetAppRetLetRetLamisAtom specialSymbolsymbolkeywordppParensnormalExprWithParensnormalExprWithParensExceptApp normalExprcoCharcoSymbol castSymbolcoercionSymbolcoercionBindSymbolcoText coKeywordtySymbol typeSymboltypeBindSymbol typeArrowtyText consMaybe substTopBindR freeIdsQuery deShadowProgR CoreSubstsubstTyoccurAnalyseExproccurAnalyseExprRarityOfinfoshowExprTypeOrKindcoreNodecoreConstructorrulesToRewriteHgetHermitRules rules_helpmakeRuleaddCoreBindAsRule bindEqual compareValuesghc-prim GHC.TypesInt KernelStateMsgDoneReqfindWithErrMsgfindemptyLocalPathlocalPath2Path safeTakeTMVar catchFails SASTStorelocalPaths2PathspathStackToLensget$fShowLocalPathfindIdMG findIdBuiltIn inventNames shadowedBy shadowedByT replaceVar replaceVars alphaAltVaralphaAltVarsWithalphaLetNonRecalphaLetNonRecVars alphaLetRecIdalphaLetRecIdsWithalphaConsNonRecalphaConsRecIdalphaConsRecIdsWithwrongFormForAlphaconfigurableInline ensureDepthalt2Exp Data.EitherEitherdFunExprfoldaddAlpha foldMatchTcharTstring TrationalTintegerTcnameTname Tsemicolon TquestionTdotTatTlambdaTarrowTstar Tcoloneqcolon TcoloncolonTcolonTeqThashTcbraceTobraceTcparenToparenTwildTlocal TexternalTnoteTcastTofTcaseTinTletTrecTforall CoreParseM mkIntExpr' lookupNamecastElimcastElimUnsafemultiBetaReduceworkerWrapperFacBRworkerWrapperFacworkerWrapperFusionBRworkerWrapperFusionworkerWrapperSplitRworkerWrapperSplitworkerWrapperSplitParamwwAssAwwAwwAssBwwBwwAssCwwC isFixExprmkFixwrapUnwrapTypes fixLocation findFixIdparse2beforeBiRparse3beforeBiRprim_externals make_help help_command layoutTxtmetaHelp cl_cursor cl_prettycl_pretty_opts cl_rendercl_widthcl_nav cl_loadingcl_tick cl_corelint cl_failhard AstEffect PathfinderApplyUnicodeTerminalCompletionType AmbiguousCCommandCInlineC ConsiderC SessionStateCommandLineStatecl_graphcl_tagscl_dict cl_kernel cl_initSAST cl_sessionCLMShellCommandBoxGotoTagGotoStepBack MetaCommandDeleteSaveFileLoadFileDumpAbortResumeQueryFunInquiryMessageDisplay QueryDocH QueryString ShellEffectSessionStateEffectCorrectnessCriteraEndScope BeginScope ShellCommandinterpShellCommandshell_externals showRendererschangeRenderergccatchpretty showFocus iokm2clm'iokm2clm iokm2clm''newSASTcompletionTypecompletionQuery shellComplete setLoadingloopourCatch evalStmtsevalExprperformAstEffectperformShellEffect performQueryperformMetaCommandputStrToConsole finalRenders navigation getNavCmdshowDerivationTreeshowRefactorTrail showGraph cl_kernel_envtick$fRenderCodeUnicodeTerminal$fMonoidUnicodeTerminal$fRenderSpecialUnicodeTerminal$fExternShellCommand$fExternShellEffect$fExternMetaCommand$fExternQueryFun$fExternAstEffectcatchIOversionbindirlibdirdatadir libexecdir getBinDir getLibDir getDataDir getLibexecDirgetDataFileNameInterpM InterpStateisASTisPrettyisPrettyOptions shellHackOMOInstFocusGuardRRrunOMguard