T#M&E      !"#$%&'()*+,-./0123456789:;<=>?@ABCD None!"+2346EHMuWhen a VertexHint value is associated with a Type it describes alterations in the type graph from the usual default.'add an extra out edge to the given type7replace all out edges with an edge to an alternate type normal case EFGHEFGHNone23468M@A concrete type for which Expanded instances are declared below. {This class lets us use the same expand* functions to work with specially marked expanded types or with the original types. *Apply the th-desugar expand function to a I and mark it as expanded. *Apply the th-desugar expand function to a J7 and mark it as expanded. Note that the definition of J& changed in template-haskell-2.10.0.0.Expand a list of I and build an expanded K J.  !Unsafely mark a value as expanded  Strip mark off an expanded value LMN       LMN None6OPOPNone+24HMQ{Does the type or the declaration to which it refers contain a primitive (aka unlifted) type? This will traverse down any R: to the named types, and then check whether any of their S records are T values.$fType' with leading foralls strippedGiven 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.{Compute the arity of a type - the number of type parameters that must be applied to it in order to obtain a concrete type.Pretty print a Uk value on a single line with each block of white space (newlines, tabs, etc.) converted to a single space.QVWXYZ[\]^_`aQVWXYZ[\]^_`aNone 24=KM 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.!Isolate and remove some nodes"Monadic predicate version of !.#.Remove all the in- and out-edges of some nodes$Monadic predicate version of #.%ORemove some nodes and extend each of their in-edges to each of their out-edges&Monadic predicate version of %.  !"#$%&b !"#$%& !"#$%&  !"#$%&bNone!"+2346EHM 'OInformation collected about the graph implied by the structure of one or more I values.cAAll the types encountered, including embedded types such as the d and the e in  Maybe Int.f(The Info record of all known named typesg-Map of the expansion of all encountered typesh@The types with all type synonyms replaced with their expansions.i"Map from field type to field namesjHints that modify the shape of the type graph. The key is the raw type and field values that are later used to construct the TypeGraphVertex, it is unsafe to do that until TypeGraphInfo is finalized.kPCollect the graph information for one type and all the types reachable from it.lMAdd a hint to the TypeGraphInfo state and process any type it might contain..EBuild a TypeGraphInfo value by scanning the supplied types and hints.'mcfghijno()*+,-kl.p'()*+,-.'-.()*+, 'mcfghijno()*+,-kl.pNone/BFor simple type graphs always set _field and _synonyms to Nothing.1)The record filed which contains this type2.All the type synonyms that expand to this type3The fully expanded type7Return the set of qy of a type's synonyms, plus the name (if any) used in its data declaration. Note that this might return the empty set./0123r456789:;s /0123456789:; /0123564789:; /0123r456789:;sNone!"+2346EHM=Build 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 I and optional .?Build a non-field vertex@&Build a vertex associated with a fieldAGiven 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.BSimplify 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.)<=>?@ABC<=>?@ABC=<>?@ABC<=>?@ABCNone234MtLThis is based on the freeNamesOfTypes function from the th-desugar package.u1Update the free variable set for a type parameterv Extract a q from a wxyz{|t}~DuvDDxyz{|t}~Duv None+  !"#$%&'()*+,-./4567<>ABC    !"#$%&'()*+,-./01234567889:;<=>?@ABCDEFABGHIJKLMNOPQOPROPSTUV W XYOPZOP[OP\O]^_`abcdefghijklmnopqrstuvwxy0z{|OP}~OPth-typegraph-0.17.1#Language.Haskell.TH.TypeGraph.Hints$Language.Haskell.TH.TypeGraph.Expand"Language.Haskell.TH.TypeGraph.Core#Language.Haskell.TH.TypeGraph.Graph"Language.Haskell.TH.TypeGraph.Info$Language.Haskell.TH.TypeGraph.Vertex#Language.Haskell.TH.TypeGraph.Monad"Language.Haskell.TH.TypeGraph.Free$Language.Haskell.TH.TypeGraph.UnsafeLanguage.Haskell.TH.TypeGraphHasVertexHintshasVertexHints VertexHintExtraDivertNormalvertexHintTypesEExpanded markExpanded runExpanded' expandType expandPred expandClassP runExpandedunliftedField FieldTypefPos fNameAndTypeunReify unReifyNamefNamefType foldShapeconstructorNameconstructorFields typeAritypprint' GraphEdges graphFromMapcutcutMisolateisolateMdissolve dissolveM TypeGraphInfofieldshintsinfoMapsynonymstypeSetemptyTypeGraphInfo typeGraphInfoTypeGraphVertex_field_syns_etypeetypefieldsyns typeNamesbestType typeVertex fieldVertex oldVertex allVertices fieldVerticesvertextypeGraphEdges simpleEdges simpleVertex freeTypeVars$fHasVertexHintsVertexHint$fPprVertexHint$fLiftVertexHint$fDefaultVertexHinttemplate-haskellLanguage.Haskell.TH.SyntaxTypePredClassP$fPprE$fExpandedPredE$fExpandedTypeE$fExpandedPredPred$fExpandedTypeType IsUnliftedDecInfo PrimTyConILanguage.Haskell.TH.PprPpr$fIsUnliftedInfo$fIsUnliftedType$fIsUnliftedCon$fIsUnliftedDec$fLiftE $fLiftMap $fLiftSet$fPpr(,) $fPpr(,)0$fPprFieldType$fPpr() $fPpr(,,)$fPprMap_typeSetbase Data.MaybeMaybeghc-prim GHC.TypesInt_infoMap _expanded _synonyms_fields_hintscollectTypeInfocollectHintInfo$fPprTypeGraphInfoexpanded$fLiftTypeGraphInfoName$fPprTypeGraphVertex$fLiftTypeGraphVertex FreeTypeVarsgo_paramtvbName TyVarBndrSt_result_stackst0ftvresultstackgo_appgo_infogo_dec go_params$fFreeTypeVars(,,)$fFreeTypeVars(,)$fFreeTypeVarsCon$fFreeTypeVarsType$fFreeTypeVars[]