module Data.Generics( ) where type V1 :: forall (k::Kind) . k -> Type data V1 p type U1 :: forall (k::Kind) . k -> Type data U1 p = U1 newtype Par1 p = Par1 p type Rec1 :: forall (k::Kind) . (k -> Type) -> k -> Type newtype Rec1 f p = Rec1 (f p) type K1 :: forall (k::Kind) . Type -> Type -> k -> Type newtype K1 i c p = K1 c newtype M1 :: forall k . Type -> Type{-Meta-} -> (k -> Type) -> k -> Type newtype M1 i c f p = M1 (f p) infixr 5 :+: type (:+:) :: forall k . (k -> Type) -> (k -> Type) -> k -> Type data (:+:) f g p = L1 (f p) | R1 (g p) infixr 6 :*: type (:*:) :: forall k . (k -> Type) -> (k -> Type) -> k -> Type data (:*:) f g p = f p :*: g p infixr 7 :.: type (:.:) :: forall k1 k2 . (k2 -> Type) -> (k1 -> k2) -> k1 -> Type newtype (:.:) f g p = Comp1 (f (g p))