>>> data AddMul :: Nat -> Nat -> Exp Nat >>> type instance Eval (AddMul x y) = (x TL.+ y) TL.* (x TL.+ y) >>> :kind! Eval (Map (AddMul 2) '[0, 1, 2, 3, 4]) Eval (Map (AddMul 2) '[0, 1, 2, 3, 4]) :: [Nat] = '[4, 9, 16, 25, 36]
>>> :kind! Eval (Bimap ((+) 1) (Flip (-) 1) '(2, 4)) Eval (Bimap ((+) 1) (Flip (-) 1) '(2, 4)) :: (Nat, Nat) = '(3, 3)
type instance Eval (FoldMap f (xs :: MyType a)) = FoldMapDefault_ f xs
>>> :kind! FoldMapDefault_ Pure '[ 'EQ, 'LT, 'GT ] FoldMapDefault_ Pure '[ 'EQ, 'LT, 'GT ] :: Ordering = 'LT
>>> :kind! Eval (Bicomap Fst Pure (||) '( 'False, 'Nothing) 'True) Eval (Bicomap Fst Pure (||) '( 'False, 'Nothing) 'True) :: Bool = 'True