úΆç|Şt      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXY Z [ \ ] ^ _ ` a b c d e f g h i j k l m n o p q r s None 34579N*The state type used to memoize expansions.:A concrete type used to mark type which have been expanded*Apply the th-desugar expand function to a t and mark it as expanded.*Apply the th-desugar expand function to a u7 and mark it as expanded. Note that the definition of u& changed in template-haskell-2.10.0.0.Expand a list of t and build an expanded ClassP u. vwvwNone 3457FNx{Does the type or the declaration to which it refers contain a primitive (aka unlifted) type? This will traverse down any y: to the named types, and then check whether any of their z records are { values. Pretty print a |k value on a single line with each block of white space (newlines, tabs, etc.) converted to a single space.$Return a key's list of adjacent keys%Return a key's list of reachable keysÿJMake a template haskell value more human reader friendly. The result almost certainly won't be compilable. That's ok, though, because the input is usually uncompilable - it imports hidden modules, uses infix operators in invalid positions, puts module qualifiers in places where they are not allowed, and maybe other things.x }~€‚ƒ„     x }~€‚ƒ„None345N…LThis is based on the freeNamesOfTypes function from the th-desugar package.ÂReturn the names of the type variables that are free in x. I.e., type variables that appear in the type expression but are not bound by an enclosing forall or by the type parameters of a Dec.†1Update the free variable set for a type parameter‡ Extract a ˆ from a ‰Š‹Œ…‘’“”•†‡–—˜™šŠ‹Œ…‘’“”•†‡–—˜™šNone+35İGiven the list of constructors from a Dec, dispatch on the different levels of complexity of the type they represent - a wrapper is a single arity one constructor, an enum is several arity zero constructors, and so on.›œ   ›œNone35EFor simple type graphs where no parent field information is required.!.All the type synonyms that expand to this type"The fully expanded type#½A vertex of the type graph. Includes a type and (optionally) what field of a parent type holds that type. This allows special treatment of a type depending on the type that contains it.%)The record field which contains this type*Return the set of ˆy of a type's synonyms, plus the name (if any) used in its data declaration. Note that this might return the empty set. !"#$%&'()*+,-Ÿ ¡¢£¤ !"#$%&'()*+,-)*+#$%&'( !"-,  !"#$%&'()*+,-Ÿ ¡¢£¤None!"+3457FIN .OInformation collected about the graph implied by the structure of one or more t values.¥DThe kernel of types from which the others in _typeSet are discovered¦AAll the types encountered, including embedded types such as the § and the ¨ in  Maybe Int.©(The Info record of all known named typesª-Map of the expansion of all encountered types«@The types with all type synonyms replaced with their expansions.¬"Map from field type to field names­ÑCollect the graph information for one type and all the types reachable from it. The extraTypes function parameter allows extra edges to be added to the graph other than those implied by the Type structure.45Build a TypeInfo value by scanning the supplied types6ßFind the vertices that involve a particular type - if the field is specified it return s singleton, otherwise it returns a set containing a vertex one for the type on its own, and one for each field containing that type.7Build a vertex from the given t and optional «. vertex :: forall m. (DsMonad m, MonadReaders TypeInfo m) => Maybe Field -> E Type -> m TypeGraphVertex vertex fld etyp = maybe (typeVertex etyp) (fieldVertex etyp) fldBuild a non-field vertex9&Build a vertex associated with a field.®¥¦©ª«¬¯°/0123­456789±² ./0123456789 .1/023478965.®¥¦©ª«¬¯°/0123­456789±²None!"+3457FIN ;ÓGiven the discovered set of types and maps of type synonyms and fields, build and return the GraphEdges relation on TypeGraphVertex. This is not a recursive function, it stops when it reaches the field types.<!Isolate and remove matching nodes=Monadic predicate version of <.@2Remove all the in- and out-edges of matching nodesAMonadic predicate version of @.B%Replace the out set of selected nodesDTRemove matching nodes and extend each of their in-edges to each of their out-edges.EMonadic predicate version of D.F¡Simplify a graph by throwing away the field information in each node. This means the nodes only contain the fully expanded Type value (and any type synonyms.):;<=>?@ABCDEF³ :;<=>?@ABCDEF :;<=>?@ABCDEF:;<=>?@ABCDEF³None &+3457INGUA stack describes a path from a top type down through fields of its component types.K¡The information required to extact a field value from a value. We keep a stack of these as we traverse a declaration. Generally, we only need the field names.R'push an element onto the TypeStack in mU%Push the stack and process the field.WfReturn a lambda function that turns a value of Type typ0 into the type implied by the stack elements.´EReturn an expression of a lens for the value described by the stack.µLGenerate a lens to access a field, as represented by the StackElement type.XFGiven a field name, return the name to use for the corresponding lens.GHIJKLMNOPQRSTUVW¶´·µXGHIJKLMNOPQRSTUVWXGHIJOPKLTUNMVQRWSXGHIJKLMNOPQRSTUVW¶´·µX None3457>FLNZCBuild a TypeGraph given a set of edges and the TypeInfo environment[ÔBuild a graph from the result of typeGraphEdges, each edge goes from a type to one of the types it contains. Thus, each edge represents a primitive lens, and each path in the graph is a composition of lenses.\wWhen a VertexStatus value is associated with a Type it describes alterations in the type graph from the usual default.] normal case^1out degree zero - don't create any outgoing edges_<replace all outgoing edges with an edge to an alternate type`,add an extra outgoing edge to the given typegkLenses represent steps in a path, but the start point is a type vertex and the endpoint is a field vertex.hPaths go between simple types.k;Can we reach the goal type from the start type in this key?l3Can we reach the goal type in the simplified graph?mGVersion of goalReachableSimple that first simplifies its argument nodesnKReturn the TGV associated with a particular type, with no field specified.o;Return the TGV associated with a particular type and field.p©Return the set of adjacent vertices according to the default type graph - i.e. the one determined only by the type definitions, not by any additional hinting function.$Y¸¹º»¼½Z[¾\]^_`abcdef¿ghijklmÀnopÁÂÃYZ[\]^_`abcdefghijklmnopYeabcdZ[ghfijklm\]^_`pnoY¸¹º»¼½Z[¾\]^_`abcdef¿ghijklmÀnopÁÂà None &+3457INq Generate lenses to access the fields of the row types. Like Control.Lens.TH.makeLenses, but makes lenses for every field, and instead of removing the prefix '_'Æ to form the lens name it adds the prefix "lens" and capitalizes the first letter of the field. The only reason for this function is backwards compatibility, makeLensesFor should be used instead.r.Build the list of pairs used by makeLensesFor.qÄrqrqrqÄr NonesÁCompute the arity of a type - the number of type parameters that must be applied to it in order to obtain a concrete type. I'm not quite sure I understand the relationship between this and  freeTypeVars.ssssÅ    !"#$%&'())*+,,-./0123456789:;<=>?@ABCDEFGHIJKLMNOOPQRRSTUVWXYZ[\]^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x yz{|z{}~€z{z{‚z{ƒz„…†‡ˆ‰Š‹Œz{‘z{’““”•–—˜™š›œŸ ¡¢£¤¥¦§¨©ª«¬­®¯°±²³´µ¶·¸¹6º»¼½¾¿ÀÁ _ Ã Ä Å Æ Ç È É Ê Ë Ì Í ÎÏthtyp_3HQewHNzPJz1QHGeywkYQx$Language.Haskell.TH.TypeGraph.Expand%Language.Haskell.TH.TypeGraph.Prelude"Language.Haskell.TH.TypeGraph.Free#Language.Haskell.TH.TypeGraph.Shape$Language.Haskell.TH.TypeGraph.Vertex&Language.Haskell.TH.TypeGraph.TypeInfo#Language.Haskell.TH.TypeGraph.Edges#Language.Haskell.TH.TypeGraph.Stack'Language.Haskell.TH.TypeGraph.TypeGraph"Language.Haskell.TH.TypeGraph.Lens#Language.Haskell.TH.TypeGraph.Arity ExpandMapEunE expandType expandPred expandClassPunliftedLpprint'constructorNamedeclarationNamedeclarationTypeunReify unReifyName adjacent' reachable' friendlyNames freeTypeVars FieldType PositionalNamedFieldconstructorFields fieldTypefPosfNamefType foldShapeconstructorFieldTypes TGVSimple_syns_etypeTGV_field_vsimplefieldvsimpleTypeGraphVertex typeNamesbestTypeetypesynsTypeInfofieldsinfoMap startTypessynonymstypeSet makeTypeInfo allVertices fieldVertices typeVertex typeVertex' fieldVertex GraphEdgestypeGraphEdgescutcutMcutEdges cutEdgesMisolateisolateMlinklinkMdissolve dissolveM simpleEdges TypeStack_topType _typeStack StackElementStackTHasStacktopType typeStack withStackpush traceIndented prettyStack foldField execStackT stackAccessor lensNamer TypeGraph makeTypeGraph graphFromMap VertexStatusVertexSinkDivertExtraedgesgraphgsimplestacktypeInfo allPathStarts allLensKeys allPathKeys reachableFromreachableFromSimplegoalReachableFullgoalReachableSimplegoalReachableSimple'typeGraphVertextypeGraphVertexOfFieldadjacentmakeTypeGraphLenses lensNamePairs typeAritytemplate-haskellLanguage.Haskell.TH.SyntaxTypePred$fLiftE$fPprE IsUnliftedDecInfo PrimTyConILanguage.Haskell.TH.PprPpr $fLiftMap $fLiftSet$fIsUnliftedInfo$fIsUnliftedType$fIsUnliftedCon$fIsUnliftedDec$fPprL$fPpr() FreeTypeVarsgo_paramtvbNameName TyVarBndrSt_result_visitedst0ftvresultvisitedgo_appgo_infogo_dec go_params$fFreeTypeVars(,,)$fFreeTypeVars(,)$fFreeTypeVarsCon$fFreeTypeVarsType$fFreeTypeVars[]$fPprFieldType$fPpr(,) $fPpr(,)0 $fPpr(,,)$fTypeGraphVertexTGVSimple$fTypeGraphVertexTGV$fLiftTGVSimple $fLiftTGV$fPprTGV$fPprTGVSimple _startTypes_typeSetbaseGHC.BaseMaybeghc-prim GHC.TypesInt_infoMap _expanded _synonyms_fieldscollectTypeInfo $fPprTypeInfoexpanded$fLiftTypeInfo$fMonadStatesMapStateT$fPprMap stackLens fieldLens stackTypenthLens _typeInfo_edges_graph_gsimple_stack$fPprIntview' isReachable$fDefaultVertexStatus$fPprTypeGraph$fMonadReaders[]ReaderTnamer