!{ >      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRST 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[\]^_`abcdefghijklmnopqrstuvwxyz{|}~      !"#$%&'( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; < = None%&'+,013;<=>?AFKQSTV syntacticKind-polymorphic proxy typeNone%&'+013;<=>?AFKQSTVNone%&'+013;<=>?AFKQSTV+3  syntacticDifference list  syntactic Empty list  syntacticSingleton list  syntactic Given a list isI of unique natural numbers, returns a function that maps each number in is! to a unique number in the range [0 .. length is-1]. The complexity is O( maximum is). syntacticCount the number of occurrences of each element in the list. The result is an array mapping each element to its number of occurrences. syntacticPartitions the list such that two elements are in the same sub-list if and only if they satisfy the equivalence check. The complexity is O(n^2). syntactic3Upper and lower bound on the elements to be counted syntacticElements to be counted  None%&'+013;<=>?AFKQSTV=< syntacticSymbol subsumption syntacticInjection from sub to sup syntacticSymbol projection syntacticPartial projection from sup to sub syntactic Direct sum of two symbol domains syntactic4The result type of a symbol with the given signature syntactic-Class for the type-level recursion needed by $ syntactic6Signature of a partially applied (or unapplied) symbol syntactic#Signature of a fully applied symbol syntactic"Fully applied abstract syntax tree  syntactic>Generic abstract syntax tree, parameterized by a symbol domain(  dom (a  b))] represents a partially applied (or unapplied) symbol, missing at least one argument, while (  dom ( a))A represents a fully applied symbol, i.e. a complete syntax tree.# syntactic,Count the number of symbols in an expression$ syntacticGeneric symbol application$ has any type of the form: |appSym :: (expr :<: AST dom) => expr (a :-> b :-> ... :-> Full x) -> (ASTF dom a -> ASTF dom b -> ... -> ASTF dom x)% syntactic%Constrain a symbol to a specific type& syntactic$Projection to a specific symbol type !"#$%& !"#$%&  "1None%&'+013;<=>?AFKQSTVE7 syntactic6Class of expressions that can be treated as constructs9 syntactic3The denotation of a symbol with the given signature: syntactic/A representation of a syntactic construct as a >U and an evaluation function. It is not meant to be used as a syntactic symbol in an  Q. Its only purpose is to provide the default implementations of functions like equal via the 7 class.789:;=<:;=<978None%&'+0137;<=>?AFKQSTVOS > syntacticConvert a symbol to a ? of strings? syntacticConvert a symbol to a ? given a list of argument trees@ syntacticQRender a symbol as concrete syntax. A complete instance must define at least the A method.A syntacticShow a symbol as a >B syntactic2Render a symbol given a list of rendered argumentsC syntacticDefault implementation of AD syntacticDefault implementation of BE syntactic'Render an expression as concrete syntaxF syntacticConvert an expression to a ? of stringsG syntactic"Show a syntax tree using ASCII artH syntactic#Print a syntax tree using ASCII art >?@ABCDEFGHI @ABCDE>?FGHINone%&'+0137;<=>?AFKQSTVQO syntacticEvaluation of expressionsP syntacticDefault implementation of ONOPNOP None%&'+0137;<=>?AFKQSTVYT syntacticEquality for expressionsU syntacticEquality for expressionsComparing expressions of different types is often needed when dealing with expressions with existentially quantified sub-terms.V syntactic Computes a @= for an expression. Expressions that are equal according to U must result in the same hash: (equal a b ==> exprHash a == exprHash bW syntacticDefault implementation of UX syntacticDefault implementation of VTVUWXTVUWX None%&'+013;<=>?AFKQSTV[^ syntacticDerive instances for Semantic related classes (T, @, >, N)^^ None%&'+013;<=>?AFKQSTV}_ syntacticEmpty symbol type Use-case: cdata A a data B a test :: AST (A :+: (B:||Eq) :+: Empty) a test = injC (undefined :: (B :|| Eq) a)Without _G, this would lead to an overlapping instance error due to the instances +InjectC (B :|| Eq) (B :|| Eq) (DenResult a)and :InjectC sub sup a, pred a) => InjectC sub (sup :|| pred) aa syntactic 2 with bounded existentially quantified result typec syntactic * with existentially quantified result typee syntactic Similar to g(, but assumes a result type of the form c a b and constrains both a and b.g syntactic Similar to o\, but rather than constraining the whole result type, it assumes a result type of the form c a and constrains the a.i syntacticSymbol injection (like ) with constrained result typesl syntactic-Expressions that constrain their result typesm syntacticdReturns a predicate that is satisfied by the result type of all expressions of the given type (see n).n syntactic8Compute a constraint on the result type of an expressiono syntacticBConstrain the result type of the expression by the given predicateThe difference between o and q! is seen in the instances of the m type: Jtype Sat (dom :| pred) = pred :/\: Sat dom type Sat (dom :|| pred) = predq syntacticBConstrain the result type of the expression by the given predicates syntactic"Subset relation on type predicatest syntacticCompute evidence that sub is a subset of sup (i.e. that (sup a) implies (sub a))u syntacticEvidence that the predicate sub is a subset of supv syntacticUniversal type predicatew syntacticIntersection of type predicatesz syntacticWeaken an intersection{ syntacticWeaken an intersection| syntactic A version of n7 that returns a constraint for a particular predicate p as long as (p :< Sat dom) holds} syntactic A version of n% that works for domains of the form (dom1 :+: dom2) as long as (Sat dom1 ~ Sat dom2) holds~ syntacticGeneric symbol application~ has any type of the form: appSymC :: InjectC expr (AST dom) x => expr (a :-> b :-> ... :-> Full x) -> (ASTF dom a -> ASTF dom b -> ... -> ASTF dom x)%_`abcdefghijklnmopqrstuvwxyz{|}~%wvxyuz{stqroplnmk|}ij~ghefcdab`_o4q4w5 None%&'+013;<=>?AFKQSTVR syntacticN-ary syntactic functions has any type of the form: 3desugarN :: ( Syntactic a , Syntactic b , ... , Syntactic x , Domain a ~ dom , Domain b ~ dom , ... , Domain x ~ dom ) => (a -> b -> ... -> x) -> ( ASTF dom (Internal a) -> ASTF dom (Internal b) -> ... -> ASTF dom (Internal x) )...and vice versa for . syntacticIt is usually assumed that ( ( a)) has the same meaning as a. syntacticSyntactic type casting syntactic"Sugared" symbol application has any type of the form: sugarSym :: ( expr :<: AST dom , Syntactic a dom , Syntactic b dom , ... , Syntactic x dom ) => expr (Internal a :-> Internal b :-> ... :-> Full (Internal x)) -> (a -> b -> ... -> x) syntactic"Sugared" symbol application has any type of the form: sugarSymC :: ( InjectC expr (AST dom) (Internal x) , Syntactic a dom , Syntactic b dom , ... , Syntactic x dom ) => expr (Internal a :-> Internal b :-> ... :-> Full (Internal x)) -> (a -> b -> ... -> x) None%&'+013;<=>?AFKQSTV syntactic=Can be used to make an arbitrary type constructor indexed by ( a)7. This is useful as the type constructor parameter of . That is, use Args (WrapFull c) ... instead of  Args c ...if c is not indexed by ( a). syntacticList of symbol arguments syntacticwMap a function over all immediate sub-terms (corresponds to the function with the same name in Scrap Your Boilerplate) syntacticMap a function over all immediate sub-terms, collecting the results in a list (corresponds to the function with the same name in Scrap Your Boilerplate) syntacticEApply a transformation bottom-up over an expression (corresponds to  everywhere in Scrap Your Boilerplate) syntacticDApply a transformation top-down over an expression (corresponds to  everywhere' in Scrap Your Boilerplate) syntacticMap a function over an 2 list and collect the results in an ordinary list syntacticMap a function over an  list syntactic$Map an applicative function over an  list syntacticMap a monadic function over an  list syntacticRight fold for an  list syntactic>Apply a (partially applied) symbol to a list of argument terms syntactic"Pattern match" on an  S using a function that gets direct access to the top-most symbol and its sub-trees syntactic A version of  with a simpler result type syntacticFold an   using an & list to hold the results of sub-terms syntacticSimplified version of B for situations where all intermediate results have the same type syntacticFold an  . using a list to hold the results of sub-terms syntactic A version of O where the result is a transformed syntax tree, wrapped in a type constructor c syntactic Convert an   to a ? None%&'+013;<=>?AFKQSTV !"#$%&789:;<=>?@ABCDEFGHINOPTUVWX^_`abcdefghijklmnopqrstuvwxyz{|}~None%&'+013;<=>?AFKQSTV syntactic#Expressions for constructing tuples syntactic-Expressions for selecting elements of a tuple syntacticThese families ( - 2) are needed because of the problem described in: Jhttp://emil-fp.blogspot.com/2011/08/fundeps-weaker-than-type-families.html  syntactic"Return the selected position, e.g. IselectPos (Sel3 poly :: Select Poly ((Int,Int,Int,Int) :-> Full Int)) = 3/ / None%&'+013;<=>?AFKQSTV syntactic8Type-level function computing the predicate attached to  or ( (whichever appears first) in a domain.None%&'+013;<=>?AFKQSTVNone%&'+013;<=>?AFKQSTV+ syntactic#Projection with explicit monad type&*)('+&*)('+None%&'+013;<=>?AFKQSTV2323None%&'+013;<=>?AFKQSTV29 syntacticIdentity function9:9:None%&'+013;<=>?AFKQSTVY A syntactic.Decorating symbols with additional information One usage of AM is to decorate every node of a syntax tree. This is done simply by changing  AST dom sigto AST (Decor info dom) sigE syntactic(Get the decoration of the top-level nodeF syntactic+Update the decoration of the top-level nodeG syntactic[Lift a function that operates on expressions with associated information to operate on an AD expression. This function is convenient to use together with e.g. queryNodeSimple when the domain has the form (A info dom).H syntactic$Collect the decorations of all nodesI syntactic#Rendering of decorated syntax treesJ syntactic-Show an decorated syntax tree using ASCII artK syntactic.Print an decorated syntax tree using ASCII artM syntacticStrip decorations from an  ABDCEFGHIJKLM ABDCEFGHIJKLMNone%&'+013;<=>?AFKQSTVϷTUTUNone%&'+013;<=>?AFKQSTVн\]\]None%&'+0137;<=>?AFKQSTVd syntacticAlpha-equivalencef syntactic7Environments containing a list of variable equivalencesi syntactic(Evaluation of expressions with variablesk syntactic Let bindingkL is just an application operator with flipped argument order. The argument (a -> b) is preferably constructed by m.m syntacticLambda bindingo syntactic Variablesq syntacticVariable identifieru syntacticDAllow an existing binding to be used with a body of a different typev syntacticKShould be a capture-avoiding substitution, but it is currently not correct.XNote: Variables with a different type than the new expression will be silently ignored.w syntacticRBeta-reduction of an expression. The expression to be reduced is assumed to be a m.x syntactic'Evaluation of possibly open expressionsy syntactic Evaluation of closed expressionsz syntactic0Apply a symbol denotation to a list of arguments{ syntactic%Convenient default implementation of j~ syntacticuAlpha-equivalence on lambda expressions. Free variables are taken to be equivalent if they have the same identifier. syntacticU> does strict identifier comparison; i.e. no alpha equivalence.Vq assigns the same hash to all variables. This is a valid over-approximation that enables the following property: ~ a b ==> V a == V b syntacticU> does strict identifier comparison; i.e. no alpha equivalence.V assigns the same hash to all mS bindings. This is a valid over-approximation that enables the following property: ~ a b ==> V a == V bv syntacticVariable to be substituted syntacticExpression to substitute for syntacticExpression to substitute inw syntacticArgument syntacticFunction to be reduceddefhgijklmnopqrstuvwxyz{|}~qrstopmnuklvwijxyz{fhgde|}~None%&'+013;<=>?AFKQSTV ' syntactic%Pattern functor representation of an   with s syntactic"Abstract Syntax Graph"<A representation of a syntax tree with explicit sharing. An  is valid if and only if  succeeds (and the  field is correct). syntacticTop-level expression syntactic&Mapping from node id to sub-expression syntacticTotal number of nodes syntactic!Environment for alpha-equivalence syntacticPlaceholder for a syntax tree syntacticNode identifier syntactic!Show syntax graph using ASCII art syntactic"Print syntax graph using ASCII art syntactic"Update the node identifiers in an  ( using the supplied reindexing function syntacticReindex the nodes according to the given index mapping. The number of nodes is unchanged, so if the index mapping is not 1:1, the resulting graph will contain duplicates. syntactic%Reindex the nodes to be in the range  [0 .. l-1], where l% is the number of nodes in the graph syntacticERemove duplicate nodes from a graph. The function only looks at the  of each node. The  field is updated accordingly. syntacticFolding over a graphThe user provides a function to fold a single constructor (an "algebra"). The result contains the result of folding the whole graph as well as the result of each internal node, represented both as an array and an association list. Each node is processed exactly once. syntactic Convert an  to an   by inlining all nodes syntacticOFind the child nodes of each node in an expression. The child nodes of a node n* are the first nodes along all paths from n. syntactic=Count the number of occurrences of each node in an expression syntactic$Inline all nodes that are not shared syntacticRCompute a table (both array and list representation) of hash values for each node syntacticlPartitions the nodes such that two nodes are in the same sub-list if and only if they are alpha-equivalent. syntactic<Common sub-expression elimination based on alpha-equivalence##None%&'+013;<=>?AFKQSTVL syntacticA hash table from  to  (with 8 as the hashing function). I.e. it is assumed that the Zs at each entry all have the same hash, and that this number is equal to the entry's key. syntacticA of a  (c (Full a)) with hidden result type syntacticLookup a name in the history syntactic Insert the name into the history syntactic/Return a fresh identifier from the given supplyNone%&'+013;<=>?AFKQSTVhB syntacticShorthand used by CFWrites out a list of encountered nodes and returns the top expression. syntactic3Convert a syntax tree to a sharing-preserving graph:This function is not referentially transparent (hence the D). However, it is well-behaved in the sense that the worst thing that could happen is that sharing is lost. It is not possible to get false sharing. syntactic:A function that decides whether a given node can be sharedNone%&'+013;<=>?AFKQSTV$ syntacticAn abstraction of  syntacticm- with a constraint on the bound variable type syntacticEquivalent to Q (including type constraints), but using a first-order representation of binding syntactic;Adding support for higher-order abstract syntax to a domain syntacticHigher-order lambda binding syntacticiTranslating expressions with higher-order binding to corresponding expressions using first-order binding syntactic!Reify an n-ary syntactic function klo oklNone%&'+013;<=>?AFKQSTVEE syntacticA sub-expression chosen to be shared together with an evidence that it can actually be shared in the whole expression under considerationF syntactic&Environment for the expression in the G functionH syntactic1Whether the current expression is inside a lambdaI syntacticGCounting the number of occurrences of an expression in the environmentJ syntacticLThe set of variables that are not allowed to occur in the chosen expression syntactic)A function that, if possible, returns an  for sharing a specific sub-expression. The first argument is the expression to be shared, and the second argument the expression in which it will be shared."This function makes the caller of  [ responsible for making sure that the necessary type constraints are fulfilled (otherwise K~ is returned). It also makes it possible to transfer information, e.g. from the shared expression to the introduced variable. syntactic*Interface for injecting binding constructs syntactic+Interface for projecting binding constructsL syntacticZSubstituting a sub-expression. Assumes no variable capturing in the expressions involved.M syntactic3Count the number of occurrences of a sub-expressionN syntactic.Get the set of free variables in an expressionO syntacticHChecks whether a sub-expression in a given environment can be lifted outG syntactic Choose a sub-expression to share  syntactic?Perform common sub-expression elimination and variable hoisting  syntacticA  implementation for   syntacticLike A but with common sub-expression elimination and variable hoisting  syntacticAn  implementation for The supplied function determines whether or not an expression can be shared by returning a witness that the type of the expression satisfies the predicate pVar.L syntacticSub-expression to be replaced syntacticReplacing sub-expression syntacticWhole expressionM syntacticExpression to count syntacticExpression to count in  syntacticHControl wether a sub-expression can be hoisted over the given expression          None%&'+013;<=>?AFKQSTVO<P syntacticShorthand used by QFWrites out a list of encountered nodes and returns the top expression. syntactic3Convert a syntax tree to a sharing-preserving graph syntacticBReifying an n-ary syntactic function to a sharing-preserving graph:This function is not referentially transparent (hence the D). However, it is well-behaved in the sense that the worst thing that could happen is that sharing is lost. It is not possible to get false sharing. syntactic:A function that decides whether a given node can be sharedNone%&'+013;<=>?AFKLQSTVd R syntacticBA set of expressions used to keep track of gathered expression in ST syntactic|An occurence count and a union of scopes for a gathered expression. Used for the heuristic for when to share an expression.U syntacticbA gathered sub-expression along with information used to decide where and if it should be shared.V syntacticThe gathered expression.W syntacticThe node id of the expression.X syntactic,Variables that occur free in the expression.Y syntacticA list of nodes which the gathered expression occurs in, which it should not be hoisted out of, along with the number of times it occurs in it and the union of all the scopes where the variable occurs.Z syntacticPlaceholder for a syntax tree. Similar to Node from Graph, but with the invariant that nodes with the same id are alpha-equivalent, given that they come from the same expression.[ syntactic8Note: Assumes the given lambda is not already in the mapS syntacticConvert an expression to a graph representation where each set of alpha-equivalent sub-expressions share a node. Occurence counts for the sub-expressions, and other information is also recorded. syntacticLike A but with common sub-expression elimination and variable hoisting syntacticHControl wether a sub-expression can be hoisted over the given expressionNone%&'+013;<=>?AFKQSTVh syntactic+User interface to embedded monadic programs" syntactic'One-layer desugaring of monadic actions# syntactic%One-layer sugaring of monadic actions !"# !"# None%&'+013;<=>?AFKQSTVz) syntacticBasic optimization* syntacticBottom-up optimization of an expression. The optimization performed is up to each instance, but the intention is to provide a sensible set of "always-appropriate" optimizations. The default implementation .S does only constant folding. This constant folding uses the set of free variables to know when it's static evaluation is possible. Thus it is possible to help constant folding of other constructs by pruning away parts of the syntax tree that are known not to be needed. For example, by replacing (using ordinary Haskell as an example) if True then a else bwith a0, we don't need to report the free variables in bP. This, in turn, can lead to more constant folding higher up in the expression.+ syntacticConstant folderGiven an expression and the statically known value of that expression, returns a (possibly) new expression with the same meaning as the original. Typically, the result will be a 22, if the relevant type constraints are satisfied.- syntacticOptimize an expression. syntactic%Convenient default implementation of * (uses y to partially evaluate)()*+,-.+)*(,-.\!"#$%&$%&''(()*+,-./0123456789:;<=>>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrst u v w x y z { | } ~                                       !"#$%&'()*+,-./0123456789:;<=>?@9ABCDEFGHIJKLMMNOPQRSTUVWXYZ[[\]^_`abcdefghijklmmnopqrsttuvwxyz{|}~      !"#$%& ' ( ) * + , - . / 0 1 2 3 4 5 6 7 8 9 : ; <=>?@ABCDE=FGHI!"JKLMNOP=>QR0STHIUVWXYZ[\]^%syntactic-1.17-L9iIuFrCH4G3zjFdYXF2RILanguage.SyntacticData.PolyProxyData.DynamicAlt Language.Syntactic.Sharing.UtilsLanguage.Syntactic.Syntax+Language.Syntactic.Interpretation.Semantics(Language.Syntactic.Interpretation.Render,Language.Syntactic.Interpretation.Evaluation*Language.Syntactic.Interpretation.Equality!Language.Syntactic.InterpretationLanguage.Syntactic.ConstraintLanguage.Syntactic.SugarLanguage.Syntactic.Traversal#Language.Syntactic.Constructs.Tuple,Language.Syntactic.Frontend.TupleConstrained!Language.Syntactic.Frontend.Tuple#Language.Syntactic.Constructs.Monad%Language.Syntactic.Constructs.Literal&Language.Syntactic.Constructs.Identity(Language.Syntactic.Constructs.Decoration'Language.Syntactic.Constructs.Construct'Language.Syntactic.Constructs.Condition%Language.Syntactic.Constructs.Binding Language.Syntactic.Sharing.Graph%Language.Syntactic.Sharing.StableName Language.Syntactic.Sharing.Reify1Language.Syntactic.Constructs.Binding.HigherOrder+Language.Syntactic.Sharing.SimpleCodeMotion"Language.Syntactic.Sharing.ReifyHO&Language.Syntactic.Sharing.CodeMotion2!Language.Syntactic.Frontend.Monad.Language.Syntactic.Constructs.Binding.Optimizeghc-prim GHC.Types Constraint)constraints-0.10.1-9CsLfte0OpZBxW1TZVnSDUData.ConstraintDictPDynamictoDynfromDynDListemptysingle fromDListreindexcount fullPartition:<:injProjectprj:+:InjLInjR DenResultApplySymappSym':->PartialFullresultASTFASTSym:$sizeappSymsymTypeprjP $fFunctorAST$fApplySym:->(->)dom$fApplySymFullASTdom$fProjectexpr1:+:$fProjectexpr1:+:0$fProjectexprexpr$fProjectsubAST $f:<:expr1:+:$f:<:expr1:+:0 $f:<:exprexpr $f:<:subAST$fEqFull $fShowFull $fFunctorFull $fFunctor:-> $fFunctor:+:Semantic semantics Denotation SemanticsSem semanticName semanticEval StringTree stringTreeSymRender renderSym renderArgsrenderSymDefaultrenderArgsDefaultrender stringTreeshowASTdrawAST writeHtmlAST $fShowAST $fRender:+:$fRenderSemantics$fStringTree:+:EvalevaluateevaluateDefault $fEval:+: $fEvalAST$fEvalSemanticsEqualityequalexprHash equalDefaultexprHashDefault$fEq:+: $fEquality:+:$fEqAST $fEqualityAST$fEqualitySemanticssemanticInstancesEmptyASTSATASTBASTE SubConstr2 SubConstr1InjectCinjC ConstrainedBy ConstrainedSatexprDict:||C':|C:<subSubTop:/\:pTop pTypeableweakLweakR exprDictSub exprDictPlusappSymCliftASTE liftASTE2liftASTB liftASTB2universe $f:/\:c1c2a$fTopa $f:<:/\:q $f:<:/\:p$f:)(->)$fSyntacticNaiaWrapFull unwrapFullArgsNil:*gmapTgmapQ everywhereUpeverywhereDownlistArgsmapArgsmapArgsAmapArgsM foldrArgsappArgsmatchquery simpleMatchfold simpleFoldlistFold matchTranstoTreeTupleTup2Tup3Tup4Tup5Tup6Tup7Tup8Tup9Tup10Tup11Tup12Tup13Tup14Tup15$fSemanticTuple$fConstrainedTupleSelectSel1Sel2Sel3Sel4Sel5Sel6Sel7Sel8Sel9Sel10Sel11Sel12Sel13Sel14Sel15Sel15'Sel14'Sel13'Sel12'Sel11'Sel10'Sel9'Sel8'Sel7'Sel6'Sel5'Sel4'Sel3'Sel2'Sel1' $fEvalTuple$fStringTreeTuple $fRenderTuple$fEqualityTuple$fSemanticSelect$fConstrainedSelect selectPos $fEvalSelect$fStringTreeSelect$fRenderSelect$fEqualitySelectTupleSat$fSyntactic(,,,,,,,,,,,,,,)$fSyntactic(,,,,,,,,,,,,,)$fSyntactic(,,,,,,,,,,,,)$fSyntactic(,,,,,,,,,,,)$fSyntactic(,,,,,,,,,,)$fSyntactic(,,,,,,,,,)$fSyntactic(,,,,,,,,)$fSyntactic(,,,,,,,)$fSyntactic(,,,,,,)$fSyntactic(,,,,,)$fSyntactic(,,,,)$fSyntactic(,,,)$fSyntactic(,,)$fSyntactic(,)$fTupleSat:+:p$fTupleSat:||p $fTupleSat:|p$fTupleSat:+:p0$fTupleSat:||p0$fTupleSat:+:p1$fTupleSat:||p1MONADReturnBindThenWhenprjMonad$fStringTreeMONAD $fEvalMONAD $fRenderMONAD$fEqualityMONAD$fSemanticMONAD$fConstrainedMONADLiteral $fEvalLiteral$fStringTreeLiteral$fRenderLiteral$fEqualityLiteral$fConstrainedLiteralIdentityId$fSemanticIdentity$fConstrainedIdentity$fEvalIdentity$fStringTreeIdentity$fRenderIdentity$fEqualityIdentityDecor decorInfo decorExprgetInfo updateDecor liftDecor collectInfostringTreeDecor showDecorWith drawDecorWithwriteHtmlDecorWith stripDecor $fEvalDecor$fStringTreeDecor $fRenderDecor$fEqualityDecor$fProjectsubDecor$fConstrainedDecor Construct$fSemanticConstruct$fConstrainedConstruct$fEvalConstruct$fStringTreeConstruct$fRenderConstruct$fEqualityConstruct Condition$fSemanticCondition$fConstrainedCondition$fEvalCondition$fStringTreeCondition$fRenderCondition$fEqualityConditionAlphaEq alphaEqSymVarEqEnv prjVarEqEnv modVarEqEnvEvalBind evalBindSymLetLambdaVariableVarId varIntegershowVar reuseLambdasubst betaReduce evalBindMevalBindappDenevalBindSymDefaultalphaEqM alphaEqM2alphaEqalphaEqSymDefaultalphaEqChildren $fShowVarId$fStringTreeVariable$fRenderVariable$fEqualityVariable$fConstrainedVariable$fStringTreeLambda$fRenderLambda$fEqualityLambda$fConstrainedLambda $fEvalLet$fStringTreeLet $fRenderLet $fEqualityLet$fConstrainedLet$fEvalBindLambda$fEvalBindVariable$fEvalBindMONAD $fEvalBindLet$fEvalBindSelect$fEvalBindTuple$fEvalBindCondition$fEvalBindLiteral$fEvalBindConstruct$fEvalBindIdentity$fEvalBindDecor$fEvalBindEmpty$fEvalBindSubConstr2$fEvalBindSubConstr1 $fEvalBind:|| $fEvalBind:| $fEvalBind:+: $fVarEqEnv[]$fAlphaEqLambdaLambdadomenv$fAlphaEqVariableVariabledomenv$fAlphaEqMONADMONADdomenv$fAlphaEqDecorDecordomenv$fAlphaEqTupleTupledomenv$fAlphaEqSelectSelectdomenv$fAlphaEqLiteralLiteraldomenv$fAlphaEqLetLetdomenv$fAlphaEqIdentityIdentitydomenv!$fAlphaEqConstructConstructdomenv!$fAlphaEqConditionConditiondomenv$fAlphaEqEmptyEmptydomenv#$fAlphaEqSubConstr2SubConstr2domenv#$fAlphaEqSubConstr1SubConstr1domenv$fAlphaEq:||:||domenv$fAlphaEq:|:|domenv$fAlphaEq:+::+:domenv $fEqVarId $fOrdVarId $fNumVarId $fRealVarId$fIntegralVarId $fEnumVarId $fIxVarIdSyntaxPFAppPFNodePFDomPF NodeDomainASG topExpression graphNodesnumNodesNodeEnvEqEnv NodeEqEnv prjNodeEqEnv modNodeEqEnvNodeNodeId nodeIntegershowNodeshowASGdrawASGreindexNodesAST reindexNodesreindexNodesFrom0nubNodes foldGraph inlineAll nodeChildren occurrences inlineSingle hashNodespartitionNodescse $fShowNodeId$fStringTreeNode $fRenderNode$fConstrainedNode $fVarEqEnv(,)$fAlphaEqNodeNodedomenv$fNodeEqEnvdom(,)$fFunctorSyntaxPF $fEqNodeId $fOrdNodeId $fNumNodeId $fRealNodeId$fIntegralNodeId $fEnumNodeId $fIxNodeIdHistoryStNamehash lookHistoryrememberfresh $fEqStName reifyGraph IsHODomainlambdaCLambdaFODomainHODomainHOLambdareifyMreifyTopreify$fSyntactic(->)$fIsHODomain:||ppVar MkInjDictInjDict injVariable injLambdainjLetPrjDict prjVariable prjLambda codeMotion prjDictFO reifySmart mkInjDictFO reifyGraphTop codeMotion2 reifySmart2$fEqualityNode$fShowGatherInfoMonunMon desugarMonad sugarMonad$fSyntacticMon$fApplicativeMon $fMonadMon $fFunctorMon Optimize'Optimize optimizeSym ConstFolder optimizeMoptimizeoptimizeSymDefault$fOptimizeLambda$fOptimizeVariable$fOptimizeCondition $fOptimizeLet$fOptimizeSelect$fOptimizeTuple$fOptimizeLiteral$fOptimizeConstruct$fOptimizeIdentity$fOptimizeSubConstr2$fOptimizeSubConstr1$fOptimizeEmpty $fOptimize:|| $fOptimize:| $fOptimize:+:baseGHC.BaseStringcontainers-0.5.11.0 Data.TreeTree(data-hash-0.2.0.1-D2pljNnFjuv5cOCQdMozWUData.Hash.BaseHashSystem.Mem.StableName StableName GraphMonad reifyGraphMIOChosenEnvchooseinLambdacounter dependenciesNothing substitutefreeVarsliftable GatherSetgather GatherInfoGatheredgeExprgeNodeId geFreeVarsgeInfoinsertLT