úÎ? !" !" !">? Safe-Inferred!"&'(+23468=HJKM #$%&'()*+,-#$% $%-,+*)('&# #$%&'()*+,- Safe-Inferred!"&'(+23468=HJKM.Helper type infering that hset els contains element of type e and can be modified/*Check that we can turn one hset to another2Like 1" but do not change the hset's type./012@A./01201/.2./012@A Safe-Inferred!"&'(+23468=HJKM3"Enables deriving of the fact that e is contained within els and it's safe to say that 5* can be performed on this particular pair.40Heterogeneous 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 5‰ takes specific element from list of uniquely typed elements depending on what type is required to be returned (return type polymorphism)5Gets any data from HSet for you345BC345453345BC Safe-Inferred!"&'(+23468=HJKM7OTakes 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))9Like 8 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)):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 :: Int206789:DEF6789:7869:6789:DEF  Safe-Inferred!"&'(+23468=HJKM !"#$%./0123456789:G     !"#$%&'()*+,-./0123456789:;<=>?@ABCDEFGHIJKLMNOPQ hset-2.0.0Data.HSet.TypeLevelData.HSet.TypeData.HSet.ReverseData.HSet.RemoveData.HSet.UnionData.HSet.Modify Data.HSet.GetData.HSet.SubHSet Data.HSetHSubsetAndDeleteReverseXReverseAppendLengthTEqMayFstIndexSndMayIndex MayIndexGoIndexElemNatSZHSetHSConsHSNil $fNFDataHSet $fNFDataHSet0 $fOrdHSet $fOrdHSet0$fEqHSet $fEqHSet0 $fShowHSet $fShowHSet0 HReversibleHReverse hreverse'hreverse HDeletableHRemovehremovehdelete HUnionableHUnionhunion$fHUnion:::NothingJust$fHUnion:els2:JustNothing$fHUnion:::JustJust$fHUnion:::JustJust0$fHUnion:::NothingNothing$fHUnion:[]:NothingNothing$fHUnion[]::NothingNothing$fHUnion[][][]NothingNothingHMonoModifiable HModifiableHModifyhmodify hMonoModify HGettableHGethget SubHSettableSubHSetsubHSethnarrow hgetTagged$fHReverse[]:els2$fHReverse::els2$fHReverseacc[]acc$fHRemoveNat::S$fHRemoveNat:elsZ$fHModify::e1e2S$fHModify::e1e2Z $fHGet:eS $fHGet:eZ$fSubHSetels:True$fSubHSetels:False$fSubHSetels[]eq