IgC =      !"#$%&'()*+,-./0123456789:;< 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 = and mark it as expanded.*Apply the th-desugar expand function to a >7 and mark it as expanded. Note that the definition of >& changed in template-haskell-2.10.0.0.Expand a list of = and build an expanded ? >. !Unsafely mark a value as expanded Strip mark off an expanded value@AB   @ABNone6CDCDNone+24HME{Does the type or the declaration to which it refers contain a primitive (aka unlifted) type? This will traverse down any F: to the named types, and then check whether any of their G records are H 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 Ik value on a single line with each block of white space (newlines, tabs, etc.) converted to a single space.E JKLMNOPQRSTU    E  JKLMNOPQRSTUNone 24=KMBuild 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 nodesMonadic predicate version of ..Remove all the in- and out-edges of some nodesMonadic predicate version of .ORemove some nodes and extend each of their in-edges to each of their out-edgesMonadic predicate version of . V VNone!"+2346EHM OInformation collected about the graph implied by the structure of one or more = values.WAAll the types encountered, including embedded types such as the X and the Y in  Maybe Int.Z(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^PCollect the graph information for one type and all the types reachable from it.&:Build a TypeGraphInfo value by scanning the supplied types _WZ[\]`a!"#$%^&b !"#$%& %&!"#$ _WZ[\]`a!"#$%^&bNone'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 cy of a type's synonyms, plus the name (if any) used in its data declaration. Note that this might return the empty set.'()*+d,-./0123e '()*+,-./0123 '()*+-.,/0123 '()*+d,-./0123eNone!"+2346EHM5Build 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.6Build a vertex from the given = and optional  .7Build a non-field vertex8&Build a vertex associated with a field9Given 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.: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.)456789:;456789:;546789:;456789:;None234MfLThis is based on the freeNamesOfTypes function from the th-desugar package.g1Update the free variable set for a type parameterh Extract a c from a ijklmnfopq<rstughvwxyz<<jklmnfopq<rstughvwxyz None&  !"#$%&',-./469:;{      !"#$%&'()*+,-.//0123456789:;<=89>?@ABCDBCEBCFGHIJKLBCMBCNBCOBPQRSTUVWXYZ[\]^_`abcdefghij(klmBCnopqrsBCtuuvwxyz{|}~th-typegraph-0.18$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.TypeGraphEExpanded markExpanded runExpanded' expandType expandPred expandClassP runExpandedunliftedField FieldTypefPos fNameAndTypeunReify unReifyNamefNamefType foldShapeconstructorNameconstructorFields typeAritypprint' GraphEdges graphFromMapcutcutMisolateisolateMdissolve dissolveM TypeGraphInfofieldsinfoMapsynonymstypeSetemptyTypeGraphInfo typeGraphInfoTypeGraphVertex_field_syns_etypeetypefieldsyns typeNamesbestType typeVertex fieldVertex oldVertex allVertices fieldVerticesvertextypeGraphEdges simpleEdges simpleVertex freeTypeVarstemplate-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_fieldscollectTypeInfo$fPprTypeGraphInfoexpanded$fLiftTypeGraphInfoName$fPprTypeGraphVertex$fLiftTypeGraphVertex FreeTypeVarsgo_paramtvbName TyVarBndrSt_result_stackst0ftvresultstackgo_appgo_infogo_dec go_params$fFreeTypeVars(,,)$fFreeTypeVars(,)$fFreeTypeVarsCon$fFreeTypeVarsType$fFreeTypeVars[]