úÎSÿN•D      !"#$%&'()*+,-./0123456789:;<=>?@ABC 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,out degree zero - don't create any out edges,don't create this vertex, no in or out edges normal case DEFDEF Safe-Inferred=KM,Remove a node and all its in- and out-edges.2Cut vertices for which the predicate returns False 2Cut vertices for which the predicate returns False 2Merge a node into the nodes that are its in-edges.Ô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.        None23468M@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 G and mark it as expanded.*Apply the th-desugar expand function to a H7 and mark it as expanded. Note that the definition of H& changed in template-haskell-2.10.0.0.Expand a list of G and build an expanded I H. !Unsafely mark a value as expanded Strip mark off an expanded valueJKL   JKL None6MNMNNone+24HMO{Does the type or the declaration to which it refers contain a primitive (aka unlifted) type? This will traverse down any P: to the named types, and then check whether any of their Q records are R values. $fType' with leading foralls stripped!Ý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.${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 Sk value on a single line with each block of white space (newlines, tabs, etc.) converted to a single space.O !"#$%TUVWXYZ  !"#$%  #!"$%O !"#$%TUVWXYZNone&BFor simple type graphs always set _field and _synonyms to Nothing.()The record filed which contains this type).All the type synonyms that expand to this type*The fully expanded 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. &'()*\+,-.] &'()*+,-. &'()*,-+.&'()*\+,-.]None24/^///^None!"+2346EHM0OInformation collected about the graph implied by the structure of one or more G values.9EBuild a TypeGraphInfo value by scanning the supplied types and hints.0_`abcdef123456789g 0123456789 0791234568 0_`abcdef123456789gNone!"+2346EHM :0Build a TypeGraphVertex from an unexpanded type.;>Build a TypeGraphVertex for a field of a record. This calls : and then sets the _field value.h¢Return the set of vertices referred to by a hint's vertex - if field is Nothing it means all the fields with that type, if it is something it means just itself.<ÿStart with the type graph on the known types with no field information, and build a new graph which incorporates the information from the vertex hints. This means splitting the nodes according to record fields, because hints can refer to particular fields of a record.i Find all the &° that involve this type. All returned nodes will have the same set of type synonyms, but there will be one for each field where the type appears and one with field Nothing.=Ó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.>ÆReturn the set of types embedded in the given type. This is just the nodes of the type graph. The type synonymes are expanded by the th-desugar package to make them suitable for use as map keys.?Ô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.@¡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.)B>Find all the reachable type synonyms and return then in a Map. :;h<i=>?@ABC :;<=>?@ABC =:;<>?@ABC :;h<i=>?@ABC NoneD  !"#$%&'()*+,-./0123456789:;<=>?@ABCj    !"#$$%&'()*+,-.//0123456789:;<=>?@ABCDEFGHIJKLMNOPQOPROPSTUV W XYOPZOP[OP\O]^_`abcdeOPfghi8jklmnopqrstth-typegraph-0.14#Language.Haskell.TH.TypeGraph.Hints#Language.Haskell.TH.TypeGraph.Graph$Language.Haskell.TH.TypeGraph.Expand"Language.Haskell.TH.TypeGraph.Core$Language.Haskell.TH.TypeGraph.Vertex#Language.Haskell.TH.TypeGraph.Edges"Language.Haskell.TH.TypeGraph.Info#Language.Haskell.TH.TypeGraph.Monad$Language.Haskell.TH.TypeGraph.UnsafeLanguage.Haskell.TH.TypeGraph VertexHintExtraDivertSinkHiddenNormal GraphEdges cutVertex cutVertices cutVerticesM mergeVertex mergeVerticesmergeVerticesM partitionMflatten graphFromMapEExpanded markExpanded runExpanded expandType expandPred expandClassP runExpanded'unlifted FieldTypefPos fNameAndTypefName prettyFieldfType foldShapeconstructorNameconstructorFields typeAritypprint'TypeGraphVertex_field_syns_etypeetypefieldsyns typeNamesTypeGraphEdges TypeGraphInfoexpandedfieldshintsinfoMapsynonymstypeSetemptyTypeGraphInfowithTypeGraphInfo typeGraphInfo typeVertex fieldVertextypeGraphEdges findEdgestypeGraphVertices typeGraph simpleEdges simpleVertextypeSynonymMaptypeSynonymMapSimple$fPprVertexHint$fLiftVertexHint$fDefaultVertexHinttemplate-haskellLanguage.Haskell.TH.SyntaxTypePredClassP$fPprE$fExpandedPredE$fExpandedTypeE$fExpandedPredPred$fExpandedTypeType IsUnliftedDecInfo PrimTyConILanguage.Haskell.TH.PprPpr$fLiftE $fLiftMap $fLiftSet$fIsUnliftedInfo$fIsUnliftedType$fIsUnliftedCon$fIsUnliftedDecName$fPprTypeGraphVertex$fLiftTypeGraphVertex$fPprMap_typeSet_infoMap _expanded _synonyms_fields_hints$fPprTypeGraphInfo$fLiftTypeGraphInfo fieldVertices typeVertices