\y      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\] ^ _ ` a b c d e f g h i j k l m n o p q r s t u v w x None +34579N:A concrete type used to mark type which have been expanded*The state type used to memoize expansions.*Apply the th-desugar expand function to a y and mark it as expanded.*Apply the th-desugar expand function to a z7 and mark it as expanded. Note that the definition of z& changed in template-haskell-2.10.0.0.Expand a list of y and build an expanded ClassP z. {|{|None 3457FN:Perform a fold over the Type and Info values embedded in t Pretty print a } value on a single line with each block of white space (newlines, tabs, etc.) converted to a single space, and all the module qualifiers removed from the names. {Does the type or the declaration to which it refers contain a primitive (aka unlifted) type? This will traverse down any ~: to the named types, and then check whether any of their  records are  values.$Return a key's list of adjacent keys%Return a key's list of reachable keysJMake 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.       None345NLThis 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. !  ! !  !None+35"EFor 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."#$%&'()*+,-./01"#$%&'()*+,-./01-./&'()+,"#$%10*"#$%&'()*+,-./01None!"+3457FIN 2OInformation collected about the graph implied by the structure of one or more y values.DThe kernel of types from which the others in _typeSet are discoveredAAll 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 namesCollect 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.85Build a TypeInfo value by scanning the supplied types: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.;Build a vertex from the given y 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 vertex=&Build a vertex associated with a field23456789:;<= 23456789:;<= 2534678;<=:923456789:;<=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 nodesAMonadic predicate version of @.D2Remove all the in- and out-edges of matching nodesEMonadic predicate version of D.F%Replace the out set of selected nodesHTRemove matching nodes and extend each of their in-edges to each of their out-edges.IMonadic predicate version of H.JSimplify 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.) >?@ABCDEFGHIJ >?@ABCDEFGHIJ >?@ABCDEFGHIJ >?@ABCDEFGHIJNone &+3457INKUA stack describes a path from a top type down through fields of its component types.OThe 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.V'push an element onto the TypeStack in mY%Push the stack and process the field.[fReturn 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.\FGiven a field name, return the name to use for the corresponding lens.KLMNOPQRSTUVWXYZ[\KLMNOPQRSTUVWXYZ[\KLMNSTOPXYRQZUV[W\KLMNOPQRSTUVWXYZ[\ None3457>FLN^CBuild 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.a normal caseb1out degree zero - don't create any outgoing edgesc<replace all outgoing edges with an edge to an alternate typed,add an extra outgoing edge to the given typeh`All the nodes in the TGV (unsimplified) graph, where each field of a record is a distinct node.iTAll the nodes in the TGVSimple graph, where each field representa a different type.jEach lens represents a single step in a path. The start point is a simplified vertex and the endpoint is an unsimplified vertex.k1Return the nodes adjacent to x in the lens graph.lPaths go between simple types.m4Return the nodes reachable from x in the path graph.p;Can we reach the goal type from the start type in this key?q3Can we reach the goal type in the simplified graph?rGVersion of goalReachableSimple that first simplifies its argument nodessKReturn the TGV associated with a particular type, with no field specified.t;Return the TGV associated with a particular type and field.uReturn 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.%]^_`abcdefghijklmnopqrstu]^_`abcdefghijklmnopqrstu]efg^_hikjmlnopqr`abcdust]^_`abcdefghijklmnopqrstu None &+3457INvGenerate 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.w.Build the list of pairs used by makeLensesFor.vwvwvwvw NonexCompute 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.xxxx    !"#$%&'()*+,,-.//0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSSTUVVWXYZ[\]^_`ab c d e f g h i j k l m n o p q r s t u v w x y z { | } ~: c thtyp_9OmW9Ws2KAM499P2q85PGY$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.ArityE_unE ExpandMapunE expandType expandPred expandClassP OverTypes overTypesLpprint'unliftedconstructorNamedeclarationNamedeclarationTypeunReify unReifyName adjacent' reachable' friendlyNames freeTypeVars FieldType PositionalNamedFieldconstructorFields fieldTypefPosfNamefType foldShapeconstructorFieldTypes TGVSimple_syns_etypeTGV_field_vsimpletgvfieldvsimpleTypeGraphVertex 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 VertexStatusVertexSinkDivertExtragraphgsimplestack allPathNodes allPathStarts allLensKeyslensKeys allPathKeyspathKeys reachableFromreachableFromSimplegoalReachableFullgoalReachableSimplegoalReachableSimple'typeGraphVertextypeGraphVertexOfFieldadjacentmakeTypeGraphLenses lensNamePairs typeAritytemplate-haskellLanguage.Haskell.TH.SyntaxTypePred$fLiftE$fPprELanguage.Haskell.TH.PprPprDecInfo PrimTyConI $fLiftMap $fLiftSet$fOverTypesInfo$fOverTypesType$fOverTypesCon$fOverTypes(,,)$fOverTypes(,)$fOverTypesDec$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$fPprMap $fPprMap0 $fPpr(,,)0$fPprTGV$fPprTGVSimple _startTypes_typeSetbaseGHC.BaseMaybeghc-prim GHC.TypesInt_infoMap _expanded _synonyms_fieldscollectTypeInfo $fPprTypeInfoexpanded$fLiftTypeInfo$fMonadStatesMapStateT stackLens fieldLens stackTypenthLens$fMonadReadersTypeInfoReaderT_graph_gsimple_stackview' isReachable$fDefaultVertexStatus$fPprInt$fMonadReaders[]ReaderTnamer