The generalization is to allow constructors of any arity.
type  g(τ) = Cg of  τi  ∣ … Cg of  τn
This is rather easy and left as an exercise. Then, one could define:
type1, α2) (_ * _) = (_, _) of (α1, α2)
fst =def λ z. (F* zx. λ y. x))
snd =def λ z. (F* zx. λ y. y))