Et      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{| } ~                                                                                                                 !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~            !!!!""""" " # # $ $%%%%%%%%%%%%%%&(' Safe-InferredXCharacters that are valid as the leading character of an identifier in a HERMIT script. =Characters that are valid identifier elements (a superset of ) in a HERMIT script. ACharacters that are valid in infix operators in a HERMIT script.  SChars that are valid as the leading character of an identifier in a Core fragment. !=Characters that are valid identifier elements (a superset of  ) in a Core fragment. "ACharacters that are valid in infix operators in a Core fragment.  !"# !" !"#None+Given a list of $s, produce the % to %& function required to build a plugin. ,CBuild a hermit plugin. This mainly handles the per-module options. &=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 'LFilter options to those pertaining to this module, stripping module prefix. ! !"#$%&'()*+,&'-. !"#$%&'()*+,-.+,*)('&%$#"! .-*)('&%$#"! +,&'-.None/9A simple expression language AST, for things parsed from ( or JSON structures. 0List of expressions 1Core Fragment 2 Application. 3Commands (to be looked up in ()). 4(Variable names (refers to source code). ).Use ghci Parser.hs to run this test function. *+,-./0123456789:;<=/01234>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)567 /01234567 576/43210y*+,-./0 =<;:987654321/43210>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~)567None 9 Get the unqualified name from a . :$Get the fully qualified name from a . ;DConvert a variable to a neat string for printing (unqualfied name). <Converts a GHC  to a Template Haskell , going via a (. = Converts an  to a Template Haskell , going via a (. > Compare a ( to a  for equality. F Strings containing a period are assumed to be fully qualified names. ? Compare a ( to a  for equality. See >. @ Compare a  to a  for equality. See >. A Compare a  to a  for equality. See >. BFind 8s matching a given fully qualified or unqualified name. [ If given name is fully qualified, will only return first result, which is assumed unique. CFind  s matching a . See B. DPretty-print an identifier. 89:;<=>?@ABCD 89:;<=>?@ABCDD; <=@>A?:9BC  889:;<=>?@ABCDNoneELCrumbs record a path through the tree, using descriptive constructor names. 0Unlike everything else, there is no synonym for  $ provided by GHC, so we define 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. 3A 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. 0A binding group and the program it scopes over. An empty program. 'Get the list of bindings in a program. )Build a program from a list of bindings. ` Note that bindings earlier in the list are considered scope over bindings later in the list. Extract the list of identifier/'expression pairs from a binding group. %Convert a definition to an identifier/expression pair. VConvert a list of recursive definitions into an (isomorphic) recursive binding group. GHC'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 . Returns True iff the expression is a  expression at its top level. )Count the number of nested applications. Return the domain/-codomain type of an endofunction expression. ?Return the domain and codomain types of a function expression. !Check two expressions have types a -> b and b -> a , returning (a,b).  Converts a E into the E+ pointing to its left-sibling, if a such a E exists. Q This is for backwards compatibility purposes with the old Int representation.  Converts a E into the E, pointing to its right-sibling, if a such a E exists. Q This is for backwards compatibility purposes with the old Int representation. SEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~REFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~RE~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFE=~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFNone <CoreTC is a sum type for use by KURE. CoreTC = Core + TyCo <TyCo is a sum type for use by KURE. TyCo = Type + Coercion  A coercion. A type. iCore is a sum type for use by KURE. Core = ModGuts + CoreProg + CoreBind + CoreDef + CoreExpr + CoreAlt A case alternative. An expression. A recursive definition. A binding group. 5A program (a telescope of top-level binding groups).  The module.  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 top-level lexical environment. GHC rewrite RULES. >A class of contexts that store the Global Reader Environment. 2A class of contexts that store GHC rewrite rules. AA class of contexts from which HERMIT bindings can be retrieved. iA class of contexts that stores the set of variables in scope that have been bound during the traversal. AA class of contexts that can have HERMIT bindings added to them. 9Add a complete set of parrallel bindings to the context. N (Parallel bindings occur in recursive let bindings and case alternatives.) ? This can also be used for solitary bindings (e.g. lambdas). F Bindings are added in parallel sets to help with shadowing issues. HERMIT''s representation of variable bindings. l Bound expressions cannot be inlined without checking for shadowing issues (using the depth information). CWe store both the scrutinised expression, and the case alternative C (which can be converted to Constructor or Literal) and variables. OThe depth of a binding. Used, for example, to detect shadowing when inlining. Retrieve the expression in a , if there is one. Retrieve the expression in a , if there is one. %Add a single binding to the context. 2Add all bindings in a binding group to a context. 8Add a wildcard binding for a specific case alternative. *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. Add the variables bound by a  in a case. ) They are all bound at the same depth. 9Add a universally quantified type variable to a context. CList all variables bound in the context that match the given name. /Determine if a variable is bound in a context. 0Lookup the binding for a variable in a context. Create the initial HERMIT  by providing a %.  Extend the  stored in the HERMIT context.  Retrieve the / to the current node, from the HERMIT context. &Here the bindings are just discarded. / NoneA message packet.  A postcard. #The HERMIT monad is kept abstract. 'A way of sending messages to top level A store of saved definitions. $A label for individual definitions. $Get the stash of saved definitions. (Replace the stash of saved definitions. "Save a definition for future use. &Lookup a previously saved definition. Eliminator for .  can be lifted to . 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. This gives an new version of a ., with the same info, and a new textual name. NoneTranslate a module. H Slightly different to the other congruence combinators: it passes in all1 of the original to the reconstruction function.  Rewrite the  child of a module. Translate an empty list. "Translate a program of the form: ( : ) 0Rewrite all children of a program of the form: ( : ) 0Rewrite any children of a program of the form: ( : ) -Rewrite one child of a program of the form: ( : ) 'Translate a binding group of the form: NonRec   5Rewrite all children of a binding group of the form: NonRec   5Rewrite any children of a binding group of the form: NonRec   2Rewrite one child of a binding group of the form: NonRec   '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 recursive definition of the form: Def   <Rewrite all children of a recursive definition of the form: Def   <Rewrite any children of a recursive definition of the form: Def   9Rewrite one child of a recursive definition of the form: Def   +Translate a case alternative of the form: (, [], ) 9Rewrite all children of a case alternative of the form: (, , ) 9Rewrite any children of a case alternative of the form: (, , ) 6Rewrite one child of a case alternative of the form: (, , ) %Translate an expression of the form: Var   Rewrite the % child in an expression of the form: Var  %Translate an expression of the form: Lit   Rewrite the % child in 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   3Rewrite all children of an expression of the form: Lam   3Rewrite any children of an expression of the form: Lam   0Rewrite one 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   3Rewrite all children of an expression of the form: Cast    3Rewrite any children of an expression of the form: Cast    0Rewrite one child of an expression of the form: Cast    %Translate an expression of the form: Tick    3Rewrite all children of an expression of the form: Tick    3Rewrite any children of an expression of the form: Tick   3Rewrite any children of an expression of the form: Tick   %Translate an expression of the form: Type    Rewrite the  % child in an expression of the form: Type   %Translate an expression of the form: Coercion   Rewrite the % child in 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  ) :  4Rewrite all children of an expression of the form: (NonRec  ) :  4Rewrite any children of an expression of the form: (NonRec  ) :  1Rewrite one child of an expression of the form: (NonRec  ) :  &Translate an expression of the form: (Rec []) :  4Rewrite 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: (Rec [(, )]) :   4Rewrite 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     [(, [], )] 03Rewrite all children of an expression of the form: Case     [(, [], )] 13Rewrite any children of an expression of the form: Case     [(, [], )] 20Rewrite one child of an expression of the form: Case     [(, [], )] 3Promote a rewrite on % to a rewrite on . 4Promote a rewrite on  to a rewrite on . 5Promote a rewrite on  to a rewrite on . 6Promote a rewrite on  to a rewrite on . 7Promote a rewrite on  to a rewrite on . 8Promote a rewrite on  to a rewrite on . 9#Promote a bidirectional rewrite on  to a bidirectional 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 . @Translate a type of the form: TyVarTy  A Rewrite the  child of a type of the form: TyVarTy  BTranslate a type of the form: LitTy  C Rewrite the  child of a type of the form: LitTy  DTranslate a type of the form: AppTy     E,Rewrite all children of a type of the form: AppTy     F,Rewrite any children of a type of the form: AppTy     G)Rewrite one child of a type of the form: AppTy     HTranslate a type of the form: FunTy     I,Rewrite all children of a type of the form: FunTy     J,Rewrite any children of a type of the form: FunTy     K)Rewrite one child of a type of the form: FunTy     LTranslate a type of the form: ForAllTy    M,Rewrite all children of a type of the form: ForAllTy    N,Rewrite any children of a type of the form: ForAllTy    O)Rewrite one child of a type of the form: ForAllTy    PTranslate a type of the form: TyConApp  [] Q,Rewrite all children of a type of the form: TyConApp  [] R,Rewrite any children of a type of the form: TyConApp  [] S)Rewrite one child of a type of the form: TyConApp  [] T"Translate a coercion of the form: Refl   U Rewrite the  " child of a coercion of the form: Refl   V"Translate a coercion of the form:  TyConAppCo  [] W0Rewrite all children of a coercion of the form:  TyConAppCo  [] X0Rewrite any children of a coercion of the form:  TyConAppCo  [] Y-Rewrite one child of a coercion of the form:  TyConAppCo  [] Z"Translate a coercion of the form: AppCo   [0Rewrite all children of a coercion of the form: AppCo   \0Rewrite any children of a coercion of the form: AppCo   ]-Rewrite one child of a coercion of the form: AppCo   ^"Translate a coercion of the form: ForAllCo   _0Rewrite all children of a coercion of the form: ForAllCo   `0Rewrite any children of a coercion of the form: ForAllCo   a-Rewrite one child of a coercion of the form: ForAllCo   b"Translate a coercion of the form: CoVarCo  c Rewrite the " child of a coercion of the form: CoVarCo  d"Translate a coercion of the form:  AxiomInstCo  [] e0Rewrite all children of a coercion of the form:  AxiomInstCo  [] f0Rewrite any children of a coercion of the form:  AxiomInstCo  [] g-Rewrite one child of a coercion of the form:  AxiomInstCo  [] h"Translate a coercion of the form: UnsafeCo     i0Rewrite all children of a coercion of the form: UnsafeCo     j0Rewrite any children of a coercion of the form: UnsafeCo     k-Rewrite one child of a coercion of the form: UnsafeCo     l"Translate a coercion of the form: SymCo  m Rewrite the " child of a coercion of the form: SymCo  n"Translate a coercion of the form: TransCo   o0Rewrite all children of a coercion of the form: TransCo   p0Rewrite any children of a coercion of the form: TransCo   q-Rewrite one child of a coercion of the form: TransCo   r"Translate a coercion of the form: NthCo   s0Rewrite all children of a coercion of the form: NthCo   t0Rewrite any children of a coercion of the form: NthCo   u-Rewrite one child of a coercion of the form: NthCo   v"Translate a coercion of the form: InstCo    w0Rewrite all children of a coercion of the form: InstCo    x0Rewrite any children of a coercion of the form: InstCo    y-Rewrite one child of a coercion of the form: InstCo    z Earlier versions of HERMIT used  as the crumb type.  This translation maps an  to the corresponding E(, for backwards compatibility purposes. {EBuilds a path to the first child, based on the old numbering system. `Walking over modules, programs, binding groups, definitions, expressions and case alternatives. "Walking over types and coercions. Walking over coercions (only). Walking over types (only). `Walking over modules, programs, binding groups, definitions, expressions and case alternatives.       !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{T      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{     #$%&'()*+,-. !"/012@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxy3456879:;<=?>z{      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{ 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. 4A command that will be removed in a future release; @ it has probably been renamed or subsumed by another command. Things we are trying out. ,An incomplete or potentially buggy command. ?Commands that are not type safe (may cause Core Lint to fail), 9 or may otherwise change the semantics of the program. 3A command that uses its context, such as inlining. Commands that are run by "*. !Version control for Core syntax. )Commands specifically to help debugging. 5Operation has a (perhaps undocumented) precondition. 'Commute is when you swap nested terms. &Introduce something, like a new name.  Something that passes or fails. A question we ask. Uses > or 7 to focus onto something. ,Command operates on local nodes only, O(1). -Command may make a deep change, can be O(n). $Command may operate multiple times. +, command. *The arrow of evaluation (reduces a term). Shell-specific 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 .  Get all the $s which match a given tag predicate . and box a Translate of the appropriate type. Build a -. from names to  values. Build a -.! from names to help information. i|}~P|}~T~|}3|}~ Nones for individual Es.  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. 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 the names of all the variables that could be targets of "consider". hLookup table for constructs that can be considered; the keys are the arguments the user can give to the "consider" command. /Find the path to the first matching construct. AConstruct a path to the (n-1)th argument in a nested sequence of s.   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 .  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. !Show before and after a rewrite. 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. TSubstitute all occurrences of a variable with an expression, in a case alternative. (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 . Lifted version of . #List all free variables in a type. =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. /Get all the specialization rules on a binding. 9 These are created by SpecConstr and other GHC passes. Promote  to CoreBind. 2Find all specialization rules in a Core fragment. 5Top-down traversal tuned to matching function calls. 44None ##Do you show fully qualified names? $*Do you hide types, and type arguments, as  ? %Do you hide coercions? &(Do you give the types for all bindings? '7This region should be highlighted (for sub-expression) (.below this depth are ..., Nothing => infinite )notes might be added to output ,"Context for PrettyH translations. P7like vcat and hcat, only make the list syntax explicit Q7like vcat and hcat, only make the list syntax explicit Use css to do the colors  -  - >  styletype="text/css"  - > .hermit-syntax {  - > color: red;  - >  /style p      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQI      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQI?6987@BAECFGD H.543210/ON     -I,KJ<=>:;!"#$%&'()*+LMQP=       ! "#$%&'()*+,-.543210/6987:;<=>?@ABCDEFGHIJKLMNOPQNoneR0Pretty print a fragment of GHC Core using HERMIT's "AST" pretty printer. D This displays the tree of constructors using nested indentation. RRRRNoneS/This pretty printer is just a reflection of GHC's standard pretty printer. SSSSNone TA handle for a specific version of the %.  Currently Ts are identified by an  label. UA U1 is a repository for complete Core syntax trees (%).  For now, operations on a U are sequential, but later # it will be possible to have two Xs running in parallel. V Halt the U9 and return control to GHC, which compiles the specified T. W Halt the U" and abort GHC without compiling. XApply a { to the specified T& and return a handle to the resulting T. YApply a  to the T! and return the resulting value. Z,Delete the internal record of the specified T. [ List all the Ts tracked by the U. \IStart a HERMIT client by providing an IO function that takes the initial U and inital T handle.  The Modguts to  Modguts'/ function required by GHC Plugins is returned. * The callback is only ever called once.     TU VWXYZ[\ TUVWXYZ[\TUVWXYZ[\VWXYZ[    TU VWXYZ[\None ]A handle for an T$ combined with scoping information. _5An alternative HERMIT kernel, that provides scoping. m)The path within the current local scope. nKA primitive means of denoting navigation of a tree (within a local scope). oTop pUp qRight rLeft sAdd a > to the end of a m. t*Movement confined within the local scope. oEnsures that the TMVar is replaced when an error is thrown, and all exceptions are lifted into KureM failures. &Lifts exceptions into KureM failures. uIStart 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. !]^_`abcdefghijklmnopqrstu]^_`abcdefghijklmnopqrstunrqpomts_`abcdefghijkl]^u]^_ `abcdefghijklmnrqpostuNonev:Apply a transformation to a value in the current context. wLift GHC's collectArgs y?Succeeds if we are looking at an application of given function < returning zero or more arguments to which it is applied. z?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 . hFind the unique variable bound in the context that matches the given name, failing if it is not unique. @Lookup the name in the context 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. #vwxyz{|}~!vwxyz{|}~!vwxyz{|}~#vwxyz{|}~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. dInvent a new String based on the old one, but avoiding clashing with the given list of identifiers. RRemove all variables from the first set that shadow a variable in the second set. Lifted version of . 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. :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. IGiven 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. ]Rename the specified variable in a case alternative. Optionally takes a suggested new name.  `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. !QAlpha rename a non-recursive let binder. Optionally takes a suggested new name. "~Alpha rename a non-recursive let binder if the variable appears in the argument list. Optionally takes a suggested new name. #bRename the specified identifier bound in a recursive let. Optionally takes a suggested new name. $_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. %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 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.  !"#$%&'(  !"#$%&'(None 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. );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. *OEnsure all the free variables in an expression were bound above a given depth.  Assumes minimum depth is 0. +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. CGet list of possible inline targets. Used by shell for completion. -%Build a CoreExpr for a DFunUnfolding )EInline the scrutinee instead of the patten match (for case binders). /Only inline if this variable is a case binder. *BGet the scrutinee instead of the patten match (for case binders). 0Only succeed if this variable is a case binder. +- )*+-None./0"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 ./0None)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 -> Translate c m 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).    None0Pretty print a fragment of GHC Core using HERMIT's "Clean" pretty printer. %123456789:;<=>?@ABCDEFGHIJKLMNOPQRST198765432:;<=>?@ABCDEFGHIJKLMNOPQRSTNonezUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~UUVWXYZ[!|{zyxwvutsrqponmlkjihgfedcba`_^]\}~None (Externals relating to Case expressions. ;case s of w; C vs -> e ==> e if w and vs are not free in e 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. %Unfloat a Case whatever the context. Unimplemented! #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 ,Remove an unused non-recursive let binding.  let v = E1 in E2 ==> E2, if v is not free in E2 ?Remove all unused recursive let bindings in the current group. let v = ev in e ==> case ev of v -> e (let v = ev in e) x ==> let v = ev in e x f (let v = ev in e) ==> let v = ev in f e let 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. !case (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. cast (let bnds in e) co ==> let bnds in cast e co Float a . through an expression, whatever the context. ,ProgCons (NonRec v (Let (NonRec w ew) ev)) p ==> 1ProgCons (NonRec w ew) (ProgCons (NonRec v ev) p)  Unfloat a  if possible. let v = ev in case s of p -> e ==> .case (let v = ev in s) of p -> let v = ev in e,  if v% does not shadow a pattern binder in p let v = ev in f a ==> #(let v = ev in f) (let v = ev in a) let v = ev in  x -> e ==> x -> let v = ev in e  if v does not shadow x :Re-order a sequence of nested non-recursive let bindings. S The argument list should contain the let-bound variables, in the desired order. None .Externals for local structural manipulations. - (Many taken from Chapter 3 of Andre Santos' dissertation.) NonRec v e ==> Rec [Def v e] ((\% 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). %Perform one or more beta-reductions. (let v = e1 in e2) ==> (\ v -> e2) e1 (\ v -> e1 v) ==> e1 e1 ==> (\ v -> e1 v) !Perform multiple eta-expansions. \Flatten all the top-level binding groups in the module to a single recursive binding group. pFlatten all the top-level binding groups in a program to a program containing a single recursive binding group. [Flatten all the top-level binding groups in a program to a single recursive binding group. )Abstract over a variable using a lambda.  e ==> ( x. e) x 1   None8Combine nested non-recursive lets into case of a tuple. 2Push a function through a Case or Let expression. ) Unsafe if the function is not strict.    !None;Externals for manipulating fixed points, and for the worker/wrapper transformation. f = 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 "NoneA  is a collection of s.  Looking up a  (via a (/ key) returns a list, as there can be multiple s with the same name.  List of all s provided by HERMIT. #Create a dictionary from a list of s. "The pretty-printing dictionaries.     #None the 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. ; - Apply a rewrite (giving a whole new lower-level AST). 8 - Change the current location using a computed path. 3 - Change the currect location using directions.  - Begin or end a scope.  - Add a tag. ? - Run a precondition or other predicate that must not fail.  /The first argument is a list of files to load. k      !"#$%&'()*+,-./0123456789: ;<=>?@ABCD EFGHIJKLMNOPQRS    8      $#"! %)('&*+,-./0123456789: ;<=>?@ABCD EFGHIJKLMNOPQRS/ Safe-Inferred TUVWXYZ[\]^UZ[\]^ TUVWXYZ[\]^$ Safe-Inferred        %None_`abcdefghijklmn_`abcdefglkjihmn&Noneo01201301401501601701801901:0;<0=>0?@01A0BC0BD0BEFFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~                                                                    ,                                               !"#$%&'()*++,-./0123456789:;<==>?@ABCDEFGHIJKLMNOPQRSTUUVVWXYZ[\]^_`abcdefghijkklmnopqrstuuvvwxyz{|}~k             !! ! !")"""""##$$%%%%%%%%%% %!%"%#%$&%'&'''(')'*'+',0-.0/01234567899:;<=>?@ABCDEFGHIJJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~00000000190000-00000100                             ! " # $ % & ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9:;:<:=:>:?:@:A:B:C:D:E:FGHIJKLMNNOPQRSTSUSVSWSXSYSZS[S\S]S^S_S`SaSbScSdSeSfSgShSiSjSklmlnlolplqlrlsltuvuwuxuyuzu{u|u}u~uuuuuu33                           0            0G     lm !"#$%&'()*+,-./01234567893:;<=>?@AB@CDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`ab7899:;<cdefghijklmnopqrstuvwxyz{|}~IJJKLMNOPQRSTUV[\]^_`abcdefghijklmnopqrstuvwxyz0!!!!!!!!!!!!!!!!!!!!"""""#########################################################################################################//////// / / / % %%%%%%%%%%%%%%%hermit-0.2.0.0Language.HERMIT.GHCLanguage.HERMIT.PluginLanguage.HERMIT.ParserLanguage.HERMIT.CoreLanguage.HERMIT.Kure.SumTypesLanguage.HERMIT.ContextLanguage.HERMIT.MonadLanguage.HERMIT.KureLanguage.HERMIT.External+Language.HERMIT.Primitive.Navigation.CrumbsLanguage.HERMIT.Primitive.Kure$Language.HERMIT.Primitive.NavigationLanguage.HERMIT.InterpLanguage.HERMIT.Primitive.DebugLanguage.HERMIT.Primitive.GHC$Language.HERMIT.PrettyPrinter.Common!Language.HERMIT.PrettyPrinter.AST!Language.HERMIT.PrettyPrinter.GHCLanguage.HERMIT.KernelLanguage.HERMIT.Kernel.Scoped Language.HERMIT.Primitive.Common)Language.HERMIT.Primitive.AlphaConversion Language.HERMIT.Primitive.InlineLanguage.HERMIT.Primitive.Fold Language.HERMIT.Primitive.Unfold#Language.HERMIT.PrettyPrinter.CleanLanguage.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.2TypeRepNumTyLitStrTyLitTyLitTyVarTyAppTyTyConAppFunTyForAllTyLitTy 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 coAxiomNameuqNamefqName var2String name2THName var2THNamecmpString2Name cmpString2VarcmpTHName2Name cmpTHName2VarfindNamesFromStringfindNamesFromTHppIdInfoCrumbLRCo_CoLRCo_LR InstCo_Type InstCo_CoNthCo_Co NthCo_Int TransCo_Right TransCo_LeftSymCo_CoUnsafeCo_Right UnsafeCo_LeftAxiomInstCo_ArgAxiomInstCo_IndexAxiomInstCo_Axiom CoVarCo_CoVar ForAllCo_BodyForAllCo_TyVar AppCo_Arg AppCo_FunTyConAppCo_ArgTyConAppCo_TyCon Refl_Type ForAllTy_Body ForAllTy_Var FunTy_CoDom FunTy_Dom TyConApp_ArgTyConApp_TyCon AppTy_Arg AppTy_Fun LitTy_TyLit TyVarTy_TyVarAlt_RHSAlt_VarAlt_ConCo_Co Type_Type Tick_Expr Tick_TickCast_Co Cast_ExprCase_Alt Case_Type Case_BinderCase_ScrutineeLet_BodyLet_BindLam_BodyLam_VarApp_ArgApp_FunLit_LitVar_IdDef_RHSDef_IdRec_Def NonRec_Var NonRec_RHS ProgCons_Tail ProgCons_Head ModGuts_Prog CoreTickishCoreDefDefCoreProgProgConsProgNil progToBinds bindsToProg bindToIdExprs defToIdExpr defsToRecBindexprTypeOrKindisCoArgappCount endoFunTypefunArgResTypesfunsWithInverseTypes showCrumbsdeprecatedLeftSiblingdeprecatedRightSiblingCoreTCTyCoCore CoercionCoreTypeCoreAltCoreExprCoreDefCoreBindCoreProgCoreGutsCoreHermitCHasGlobalRdrEnvhermitGlobalRdrEnv HasCoreRuleshermitCoreRules ReadBindings hermitDepthhermitBindings BoundVars boundVars AddBindingsaddHermitBindings HermitBindingHermitBindingSiteCASEWILDFORALLCASEALTLAMNONRECREC BindingDepthhermitBindingSiteExprhermitBindingExpraddBindingGroupaddCaseWildBindingaddLambdaBindingaddAltBindingsaddForallBinding findBoundVarsboundInlookupHermitBinding initHermitC DebugMessage DebugCore DebugTickHermitM HermitMEnv hs_debugChanDefStashLabelgetStashsendDebugMessagesaveDef lookupDefrunHM liftCoreMnewIdH newTyVarH cloneVarH mkHermitMEnvPathHLensH BiRewriteHRewriteH TranslateHmodGutsTmodGutsRprogNilT progConsT progConsAllR progConsAnyR progConsOneRnonRecT nonRecAllR nonRecAnyR nonRecOneRrecTrecAllRrecAnyRrecOneRdefTdefAllRdefAnyRdefOneRaltTaltAllRaltAnyRaltOneRvarTvarRlitTlitRappTappAllRappAnyRappOneRlamTlamAllRlamAnyRlamOneRletTletAllRletAnyRletOneRcaseTcaseAllRcaseAnyRcaseOneRcastTcastAllRcastAnyRcastOneRtickTtickAllRtickAnyRtickOneRtypeTtypeR coercionT coercionRrecDefT 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 promoteExprTtyVarTtyVarRlitTyTlitTyRappTyT appTyAllR appTyAnyR appTyOneRfunTyT funTyAllR funTyAnyR funTyOneR forAllTyT forAllTyAllR forAllTyAnyR forAllTyOneR tyConAppT tyConAppAllR tyConAppAnyR tyConAppOneRreflTreflR tyConAppCoTtyConAppCoAllRtyConAppCoAnyRtyConAppCoOneRappCoT appCoAllR appCoAnyR appCoOneR forAllCoT forAllCoAllR forAllCoAnyR forAllCoOneRcoVarCoTcoVarCoR axiomInstCoTaxiomInstCoAllRaxiomInstCoAnyRaxiomInstCoOneR unsafeCoT unsafeCoAllR unsafeCoAnyR unsafeCoOneRsymCoTsymCoRtransCoT transCoAllR transCoAnyR transCoOneRnthCoT nthCoAllR nthCoAnyR nthCoOneRinstCoT instCoAllR instCoAnyR instCoOneRdeprecatedIntToCrumbTdeprecatedIntToPathT StringListBox NameListBox StringBoxCoreBox CoreString unCoreStringTranslateCorePathBoxPathBoxCrumbBoxNameBoxTranslateCoreCheckBoxTranslateCoreStringBoxTranslateCoreTCStringBoxBiRewriteCoreBoxRewriteCoreTCBoxRewriteCoreBoxIntBoxTagBoxExternBoxboxunboxExternal externName externFun externHelp externTagsTag.+remTagtagMatchTagECmdTag Deprecated ExperimentTODOUnsafeContextBashVersionControlDebug PreConditionCommute Introduce PredicateQuery NavigationShallowDeepLoopEvalShell ExternalHelp ExternalNamedictionaryOfTags.&.||notTexternalmatchingExternals toDictionarytoHelpcrumbExternals externals ConsiderableCoerceTypeVarTickyCastyCaseOfLetInLambda ApplicationLiteralVariableCaseAlt DefinitionBindingbindingGroupOf considerNamerhsOf bindGroup namedBindingconsiderTargets considerablesconsiderConstructT nthArgPathInterp interpExprHinterpobserveFailureRobserveRtraceRbracketRsubstR substExprR letSubstR safeLetSubstRsafeLetSubstPlusRshowVarsfreeIdsT freeVarsT freeTyVarsT typeFreeVarscoreExprFreeVarscoreExprFreeIds altFreeVarsTaltFreeVarsExclWildTinScoperulerules exprEqual exprsEqual equivalent coreEqual lintModuleT lintProgramT lintExprT specConstrRanyCallR RenderCoderStartrEnd rDoHighlightrPutStrUnicode RenderSpecial renderSpecial SpecialSymbol ForallSymbolTypeBindSymbol TypeSymbolCoercionBindSymbolCoercionSymbol CastSymbolRightArrowSymbol TypeOfSymbol LambdaSymbol ShowOptionKindOmitAbstractShow PrettyOptionspo_fullyQualified po_exprTypes po_coercionspo_typesForBinders po_highlightpo_depthpo_notes po_ribbonpo_widthPrettyCPrettyHSyntaxForColor WarningColorLitColor TypeColor CoercionColorIdColor SyntaxColor KeywordColorAttr SpecialFontColorPathAttrTranslateCoreTCDocHBox TranslateDocHunTranslateDocHDocHattrPtyTextcoTextidColor typeColor coercionColor keywordColor markColor specialFont liftPrettyH liftPrettyC initPrettyCupdateTypeShowOptionupdateCoShowOption renderCode coreRendersvlisthlist corePrettyHASTKernelresumeKabortKapplyKqueryKdeleteKlistK hermitKernelSAST ScopedKernelresumeSabortSapplySquerySdeleteSlistSpathSmodPathS beginScopeS endScopeSkernelStoASTS LocalPath DirectionTURLextendLocalPath moveLocally 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 parseCorecaseElim 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 testQuerypushparseCoreExprT unsafeReplaceunsafeReplaceStash inlineAllfixIntrofixComputationRule rollingRulemkDict pp_dictionarybashR bashDebugR commandLineunicodeConsolehermit_versionghcFlagsoptimize interactiverunqueryatphaseafterbefore allPhases firstPhase lastPhasedisplay setPrettysetPrettyOptionspluginisScriptIdFirstCharisScriptIdCharisScriptInfixIdCharisCoreIdFirstChar isCoreIdCharisCoreInfixIdCharinfixOperatorSymbols 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 happyDontSeqNametemplate-haskellLanguage.Haskell.TH.SyntaxVar isQualifiedshowAttributesCoreSynTickishIdCoreExprCoreBind CoreUtilsexprTypeCoercion showCrumb$fInjectionCoercionCoreTC$fInjectionTypeCoreTC$fInjectionExprCoreTC$fInjection(,,)CoreTC$fInjectionCoreDefCoreTC$fInjectionBindCoreTC$fInjectionCoreProgCoreTC$fInjectionModGutsCoreTC$fInjectionTyCoCoreTC$fInjectionCoreCoreTC$fInjectionCoercionTyCo$fInjectionTypeTyCo$fInjectionExprCore$fInjection(,,)Core$fInjectionCoreDefCore$fInjectionBindCore$fInjectionCoreProgCore$fInjectionModGutsCorehermitC_bindings hermitC_depth hermitC_path kure-2.8.0Language.KURE.Path AbsolutePathhermitC_globalRdrEnvhermitC_coreRulesAltConaddHermitBindingDataCon$fExtendPathHermitCCrumb$fReadPathHermitCCrumb$fAddBindingsSnocPath$fHasGlobalRdrEnvHermitC$fHasCoreRulesHermitC$fReadBindingsHermitC$fBoundVarsHermitC$fAddBindingsHermitCputStashCoreM runHermitMnewName$fHasDynFlagsHermitM$fMonadThingsHermitM$fMonadUniqueHermitM$fMonadIOHermitM$fMonadCatchHermitM$fMonadHermitM$fApplicativeHermitM$fFunctorHermitMCoreAltTyVarTyCon KindOrTypeCoVarCoAxiomghc-prim GHC.TypesInt$fWalkercCoreTC $fWalkercTyCo$fWalkercCoercion $fWalkercType $fWalkercCore<$><*>Language.KURE.WalkersummandIsTypeT oneLargestT allLargestT oneLargestR anyLargestR allLargestR testPathTpathTpathRrootL repeatPathL exhaustPathLpathLuniquePrunePathToT uniquePathToToneNonEmptyPathToT onePathToT prunePathsToTpathsToT innermostRprunetdRonebuRonetdRanyduRanybuRanytdRallduRallbuRalltdR collectPruneTcollectTcrushbuTcrushtdTprunetdTonebuTonetdTfoldbuTfoldtdTchildRchildT childrenTchildLoneRanyRoneTallTallRWalkerLanguage.KURE.LensprojectLinjectLpureLbidirectionalLcatchLfailL testLensTfocusTfocusRlenslensTLens lastCrumbT rootPathTabsPathT lastCrumbsnocPathToPathpathToSnocPathPathSnocPath@@ ExtendPathabsPathReadPath#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 $fExtern[]2 $fExternCrumb $fExternName$fExternTranslate0$fExternTranslate1$fExternTranslate2$fExternBiTranslate$fExternTranslate3$fExternTranslate4 $fExternInt $fExternTagE $fExtern(->) $fTagCmdTag $fTagTagEhfocusRhfocusTApprecognizedConsiderablesconsiderConstructstring2considerableunderConsideration runInterp interpExpr fromDynList toBoxedList interpExpr' dynAppMsg$fFunctorInterp substTopBindR substAltR freeIdsQuery deShadowProgR CoreSubstsubstTyoccurAnalyseExproccurAnalyseExprRarityOf idSpecRules bindSpecRules specRulesinfo showIdInfo coreTCNodecoreNodecoreTCConstructorcoreConstructortypeConstructorcoercionConstructorrulesToRewriteHgetHermitRules rules_helpmakeRuleaddCoreBindAsRule bindEqual compareValues$fRenderCodeHTML DebugPrettyHTMLLaTeXASCII prettyC_path prettyC_vars HermitMarkPopAttrPushAttrattrrenderSpecialFontspecialFontMap latexToStringlistify$fRenderCodeDebugPretty$fMonoidDebugPretty$fRenderSpecialDebugPretty$fRenderCodeASCII$fRenderCodeLaTeX$fRenderSpecialHTML $fMonoidHTML$fRenderSpecialLaTeX $fMonoidLaTeX$fRenderSpecialUnicode$fRenderSpecialASCII $fMonoidASCII$fRenderSpecialChar$fDefaultPrettyOptions$fBoundVarsPrettyC$fAddBindingsPrettyC$fExtendPathPrettyCCrumb$fReadPathPrettyCCrumb$fExternTranslateDocH KernelStateMsgDoneReqfindWithErrMsgfind safeTakeTMVar catchFails SASTStore LocalPathHpathStack2PathspathStackToLenstestPathStackTgetfindIdMG findIdBuiltIn inventNames shadowedBy shadowedByT replaceVar replaceVars alphaAltVaralphaAltVarsWithalphaLetNonRecalphaLetNonRecVars alphaLetRecIdalphaLetRecIdsWithalphaConsNonRecalphaConsRecIdalphaConsRecIdsWithwrongFormForAlphaconfigurableInline ensureDepthalt2Exp Data.EitherEitherdFunExprfoldaddAlpha foldMatchRetExprRetEmptyRetAtom RetArrowType RetForAllRetAppRetLetRetLamretAppretAppsretLamretLet retForAll retArrowTypeisEmptyRisAtom normalExpr parenExprparenExprExceptApp attrPAtomExprppParens specialSymbolsymbolkeywordcoCharcoSymbol castSymbolcoercionSymbolcoercionBindSymbol coKeywordtySymbol typeSymboltypeBindSymbol typeArrowhasTypeTcharTstring TrationalTintegerTcnameTname Tsemicolon TquestionTdotTatTlambdaTarrowTstar Tcoloneqcolon TcoloncolonTcolonTeqThashTcbraceTobraceTcparenToparenTwildTlocal TexternalTnoteTcastTofTcaseTinTletTrecTforall CoreParseM mkIntExpr' lookupNamecastElimcastElimUnsafeLetmultiBetaReduceworkerWrapperFacBRworkerWrapperFacworkerWrapperFusionBRworkerWrapperFusionworkerWrapperSplitRworkerWrapperSplitworkerWrapperSplitParamwwAssAwwAwwAssBwwBwwAssCwwC isFixExprmkFixwrapUnwrapTypes fixLocation findFixIdparse2beforeBiRparse3beforeBiR make_help help_command layoutTxt bashPredicatebashHelp cl_cursor cl_prettycl_pretty_opts cl_rendercl_widthcl_nav cl_loadingcl_tick cl_corelint cl_failhard AstEffectUnicodeTerminalCompletionType AmbiguousCCommandCInlineC ConsiderC SessionStateCommandLineStatecl_graphcl_tagscl_dict cl_kernel cl_initSAST cl_sessionCLMShellCommandBoxGotoTagGotoStepBack MetaCommandDeleteSaveFileLoadFileDumpAbortResumeQueryFunInquiryMessageDisplay QueryDocH QueryString ShellEffectSessionStateEffectCorrectnessCriteraEndScope BeginScope PathfinderApply ShellCommandinterpShellCommandshell_externals showRendererschangeRenderergccatchpretty showFocus iokm2clm'iokm2clm iokm2clm''newSASTcompletionTypecompletionQuery shellComplete setLoadingbannerloopourCatch evalStmtsevalExprperformAstEffectperformShellEffect performQueryperformMetaCommandputStrToConsole finalRenders navigation getNavCmdshowDerivationTreeshowRefactorTrail showGraph cl_kernel_envtick$fRenderCodeUnicodeTerminal$fMonoidUnicodeTerminal$fRenderSpecialUnicodeTerminal$fExternShellCommand$fExternShellEffect$fExternMetaCommand$fExternQueryFun$fExternAstEffectcatchIOversionbindirlibdirdatadir libexecdir getBinDir getLibDir getDataDir getLibexecDirgetDataFileNameInterpM InterpStateisASTisPrettyisPrettyOptions shellHackOMOInstRRFocusGuardrunOMguard