-- {-# LANGUAGE UndecidableInstances #-} module Generic.Type.Example where import DeFun.Core ( type (~>), type App ) import GHC.Generics ( Generic ) import GHC.TypeNats ( type (+), type Natural ) type FieldCountSym :: a ~> Natural data FieldCountSym a type instance App FieldCountSym a = 1 type PlusSym :: Natural ~> Natural ~> Natural data PlusSym f type instance App PlusSym f = PlusSym1 f type PlusSym1 :: Natural -> Natural ~> Natural data PlusSym1 l r type instance App (PlusSym1 l) r = l + r data X3Fields = X3Fields { x3Fields1 :: (), x3Fields2 :: (), x3Fields3 :: () } deriving stock Generic -- > k! GTFoldMapC PlusSym 5 FieldCountSym (Rep X3Fields) = 3