h,v      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQRSTUVWXYZ[\]^_`abcdefghijklmnopqrstuvwxyz{|}~0.2.0.0None"#()-16G % but specialised to a constant type, Some (HasIs k f) is isomorphic to f k  but specialised to  a Dict witnesses some constraint  transform a  in something of kind k ->  to be able to use it in  7a functor useful for proving a constraint for some typeimport Data.Functor.Identity Proves @Eq (Identity (5 :: Int))Proves (Identity 5)  match on a  destructing a  destruct a       None"#()-16product of two classes8 but inversed: holds if all constraints in the list holdlike  but on the type level-the class that every type has an instance for-for all elements of a list, a contraint holds%like All but can be partially applied typelevel Or runIdentity x"bla"#(map with a function that maps forall f a$>map with a constraint that holds for all elements of the listimport Data.Functor.Consthcmap @Show (Const . show . runIdentity) (42 `HCons` HSing "bla" :: HList Identity '[ Int, String ])1HCons (Const "42") (HCons (Const "\"bla\"") HNil)%$traverse a structure with a function&traverse a structure such that a constraint holds; this is the workhorse of mapping and traversingimport Data.Functor.Consthctraverse @Show (Just . Const . show . runIdentity) (42 `HCons` HSing "bla" :: HList Identity '[ Int, String ])8Just (HCons (Const "42") (HCons (Const "\"bla\"") HNil))'foldr for HLists.(witnesses that for all HLists, we can always derive the All Top constraint)concats two heterogeneous lists ('$)&#%" !"! "!$#%&'() " ) None"#()-16.provides evidence that an element is in the tree by providing a path to the element21a constraint holds for all elements in the forest3constraint synonym for AllTree4/a constraint holds for all elements in the tree53a type family that flattens a forest down to a list61a type family that flattens a tree down to a list7map a functor over a TyForest8map a functor over a TyTree9$A forest of heterogeneous rose trees:-a heterogeneous rose tree indexed by a TyTree<a forest of TyTrees=a type level rose-tree that is only intended to store something of a certain kind, e.g. Type?*a pattern synonym for the leaf of an HTree@map a function over an HTreeA.map a function with a constraint over an HTreeB$traverse a structure with a functionCtraverse a structure such that a constraint holds; this is the workhorse of mapping and traversingDmonoidally folds down a tree to a single value using a constraint on the element in the wrapping functor, this is similar to Emonoidally folds down a tree to a single value, this is similar to F9flatten a heterogeneous tree down to a heterogeneous listGwitnesses that for any HTree the constraint AllTree Top always holdsHwitnesses that for any HForest the constraint AllForest Top always holdsI%replace an element at a certain path.HGFEDAC@BI2435679:?;.01/8<=>=><:?;?9@A87BCEDF65.01/I432GH; > None"#()-16 O4Together with HasField' implements a DFS in the treeQThis is the helper class that creates evidence, it implements a DFS together with DecideSthe search strategy used in Q0, this is intended to be used only as a DataKindVtypelevel predicate that tests whether the element is in any of the subtreesWsimple typelevel predicate that tests whether some element is in a treeX1a newtype that is labeled with some typelevel tag[a type syonym that allows for easy construction of TyTrees that have labeled nodes\a labeled HNode Leaf]a pattern that allows for direct construction and destruction of nodes with labels^*gets an element given a path into the tree_7searches a tree for an element and returns that element`searches a tree for an element and returns that element, specialised to X and unwrapsimport Data.Functor.Identitytype T = TyNodeL "top" Int [ TyNodeL "inter" Int '[ TyNodeL "foo" Int '[]], TyNodeL "foo" Int '[]]t :: HTree Identity T = 42 `HNodeL` HNodeL 4 (HNodeL 69 HNil `HCons` HNil) `HCons` HNodeL 67 HNil `HCons` HNilgetElem DFS "foo" Int t Identity 69getElem BFS "foo" Int t Identity 67\]`_^VOPWQRXYZSUT[XZY]\[`_SUTQROPWV^[ ] None"#()-16 q,HList but the type level list is existentialr,HTree but the type level tree is existentialsa Some type that take an arity two type constructor, this is necessary so that we avoid using composition on the type level or having visible parameters to the type synonymsua Some type that takes an arity one type constructor, this is for completenesswtake some existentai arity one type constructor and a function that takes the non-existential one and returns some r and return an rxtake some existential arity two type constructor and a function that takes the non-existential one and returns some r and return an ryx specialized to :szx specialized to s{fold over existential hlists|fold over existential htrees} destruct u , destruct  ~ condens the   constraints in an existential&flip the constraints in an existential{|~wx}zy qruvstuvstrqwxyz{| }~None"#()-16X" ]`FEDAC@BXYZ[" !56:?;=>% "!"!:;??]=>[@ABCEDF65XZY`     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLM1234NOPQRSTUVWXYZ[\]^_`abccdefghijklmnopqrstuvwxyz{|}~  htree-0.2.0.0-inplaceData.HTree.Labeled Data.HTreeData.HTree.ConstraintData.HTree.FamiliesData.HTree.ListData.HTree.TreeData.HTree.Existentialhtree54 ghc-internalGHC.Internal.RecordsgetFieldHasFieldghc-prim GHC.TypesType ConstraintGHC.Internal.Data.ProxyProxyHasIs HasTypeableDictChargeHasProveswithDictproves $fChargekca $fShowHasBothAllInvNotTopAllAllC||++ $fAllCkcxs$fTopkk $fAllInvk:k $fAllInvk[]k $fBothkc1c2aHListHConsHNilHSing:::hmaphcmap htraverse hctraversehcFold allTopHListhconcat $fEqHList $fEqHList0 $fShowHList $fShowHList0PathHereDeeperFarther AllForestAllTreeCAllTree FlattenForest FlattenTree ForestMapTreeMapHForestHTreeHNodeTyForestTyTreeTyNodeHLeaf hcFoldMaphFoldMaphFlatten allTopHTree allTopHForest replaceAt$fAllTreeCkcts$fEqPath $fShowPath $fEqHTree $fShowHTreeDecide evidence' HasField'evidenceSearchStrategyDFSBFSAnyElemElemLabeled MkLabeledunLabelTyNodeLHLeafLHNodeLgetElemWithPathgetElem'getElem$fHasField'BFStypTyNode$fHasField'DFStypTyNode$fHasField'BFStypTyNode0$fHasField'DFStypTyNode0$fHasFieldklHTreef$fDecidestratTruetypTyNode$fDecidestratFalsetypTyNode$fHasField'DFStypTyNode1$fHasField'BFStypTyNode1 $fShowLabeled $fEqLabeled $fOrdLabeled$fFunctorLabeled$fFoldableLabeled$fTraversableLabeled$fGenericLabeledEListETreeSome2MkSome2SomeMkSomewithwith2 withSomeHTree withSomeHList hcFoldEHListhcFoldMapEHTree withProvesprodHasflipHas $fOrdSome$fEqSome $fShowSome $fEqSome2 $fEqSome20 $fEqSome21 $fShowSome0 $fShowSome2#GHC.Internal.Data.Typeable.InternalTypeable GHC.ClassesnotGHC.Internal.Data.FoldablefoldMap