411      !"#$%&'()*+,-./0None!"&'(+34579>IKLNPHeterogeneous set (list of elements) with unique types. Useful with MonadReader.      None!"&'(+34579>IKLN EThis is auxiliary typeclass for inversing the order of hset elements 123    123None!"&'(+34579>IKLN*Delete element from HSet of specified type@let x = (HSCons "sdf" $ HSCons 123 HSNil) :: HSet '[String, Int]hdelete (Proxy :: Proxy Int) xHSCons ("sdf") (HSNil)!hdelete (Proxy :: Proxy String) xHSCons (123) (HSNil)PConstraints that e can be removed from els1 and els2 will be produced in resultGRemove i's element from hset. Second argument is a resulting hset type<Delete specific element from els1 and returns HSet with els24545None!"&'(+34579>IKLN   None!"&'(+34579>IKLNHelper type infering that hset els contains element of type e and can be modified *Check that we can turn one hset to another#Like "" but do not change the hset's type  !"#$%&'67  !"#$%&' !" #$%&'  !"#$%&'67None!"&'(+34579>IKLN( Reduces to ((HGettable els e1, HGettable els e2, ..))"Enables deriving of the fact that e is contained within els and it's safe to say that +* can be performed on this particular pair.*0Heterogeneous read arbitrarily element from hset8let x = HSCons (10 :: Int) $ HSCons (20 :: Double) HSNilx#HSCons (10) (HSCons (20.0) (HSNil)) hget x :: Int10hget x :: Double20.0 Note that + takes specific element from list of uniquely typed elements depending on what type is required to be returned (return type polymorphism)+Gets any data from HSet for you,Ylet y = HSCons (Tagged 10 :: Tagged "x" Int) $ HSCons (Tagged 20 :: Tagged "y" Int) HSNily/HSCons (Tagged 10) (HSCons (Tagged 20) (HSNil))(hgetTagged (Proxy :: Proxy "x") y :: Int10(hgetTagged (Proxy :: Proxy "y") y :: Int20()*+,89()*+,*+)(,()*+,89None!"&'(+34579>IKLN.OTakes subset of some hset, including subset of same elements in different order[let x = (HSCons "hello" $ HSCons 1234 $ HSCons 12.123 HSNil) :: HSet '[String, Int, Double] subHSet x :: HSet '[Double, Int]'HSCons (12.123) (HSCons (1234) (HSNil))#subHSet x :: HSet '[String, Double]*HSCons ("hello") (HSCons (12.123) (HSNil)) subHSet x :: HSet '[Int, String](HSCons (1234) (HSCons ("hello") (HSNil))0Like / but with proxy for convenienceXlet x = (HSCons "hello" $ HSCons 123 $ HSCons 345 HSNil) :: HSet '[String, Int, Integer]hnarrow (Proxy :: Proxy '[]) xHSNil$hnarrow (Proxy :: Proxy '[String]) xHSCons ("hello") (HSNil)*hnarrow (Proxy :: Proxy '[Int, Integer]) x#HSCons (123) (HSCons (345) (HSNil))*hnarrow (Proxy :: Proxy '[Integer, Int]) x#HSCons (345) (HSCons (123) (HSNil))-./0:;-./0./-0-./0:;None!"&'(+34579>IKLN !"#$%&'()*+,-./0<      !"#$%&'()*+,-./0123456789:;<=>?@ABCDEhset_CUiOSMpq8Oz9TF5QvXER9CData.HSet.TypeData.HSet.ReverseData.HSet.RemoveData.HSet.UnionData.HSet.Modify Data.HSet.GetData.HSet.SubHSet Data.HSetHSetHSNilHSCons $fNFDataHSet $fNFDataHSet0 $fOrdHSet $fOrdHSet0$fEqHSet $fEqHSet0 $fShowHSet $fShowHSet0 HReversibleHReverse hreverse'hreverse HDeletableHRemovehremovehdelete HUnionableHUnionhunionMayFstIndexSnd$fHUnion:::NothingJust$fHUnion:els2:JustNothing$fHUnion:::JustJust$fHUnion:::JustJust0$fHUnion:::NothingNothing$fHUnion:[]:NothingNothing$fHUnion[]::NothingNothing$fHUnion[][][]NothingNothingHMonoModifiable HModifiableHModifyhmodify hMonoModify hModifyTaggedhMonoModifyTaggedhUntaghTag AllHGettable HGettableHGethget hgetTagged SubHSettableSubHSetsubHSethnarrow$fHReverse[]:els2$fHReverse::els2$fHReverseacc[]acc $fHRemoveN::S$fHRemoveN:elsZ$fHModify::e1e2S$fHModify::e1e2Z $fHGet:eS $fHGet:eZ $fSubHSetels:$fSubHSetels[]