let y = pick (5 :: Int) :: Which '[Int, Bool] switch y (CaseFunc @Typeable (show . typeRep . (pure @Proxy))) `shouldBe` Int
let x = (5 :: Int) ./ False ./ 'X' ./ Just 'O' ./ (6 :: Int) ./ Just 'A' ./ nul afoldr (:) [] (forMany (CaseFunc @Typeable (show . typeRep . (pure @Proxy))) x) `shouldBe` ["Int", "Bool", "Char", "Maybe Char", "Int", "Maybe Char"]
>>> let ps = Predicate @Int (> 5) ./ Predicate isLetter ./ Predicate id ./ nil
>>> let ps' = cases $ afmap (CaseIxedCont_ @C0 getPredicate) ps
>>> switch (pick @Int @'[Int, Bool, Char] 5) ps' :: Bool False
>>> switch (pick @Char @'[Int, Bool, Char] 6) ps' :: Bool True
>>> switch (pick @Char @'[Int, Bool, Char] '_') ps' :: Bool False
>>> switch (pick @Int @'[Int, Bool, Char] 'a') ps' :: Bool True
>>> switch (pick @Bool @'[Int, Bool, Char] False) ps' :: Bool False
>>> switch (pick @Bool @'[Int, Bool, Char] True) ps' :: Bool True
>>> let f (x :: f a) = Const @String @a $ show x
>>> let xs = (Just @Int 5) ./ Right @Int False ./ "X" ./ (Left @Int @Bool 6) ./ nil
>>> afmap (CasedIxedFunc @Show f) xs :: Many '[Const String Int, Const String Bool, Const String Char, Const String Bool] Const "Just 5" ./ Const "Right False" ./ Const "\"X\"" ./ Const "Left 6" ./ nil
>>> atraverse (CasedIxedFunc @Show f) xs :: Const String (Many '[Int, Bool, Char, Bool]) Const "Just 5Right False\"X\"Left 6"