\import Data.Or

\class HasProduct (E : \Type)
  | Product \alias \infixl 7  : E -> E -> E

\instance TypeHasProduct.{u} : HasProduct (\Type u)
  | Product A B => \Sigma A B

\instance SetHasProduct.{u} : HasProduct (\Set u)
  | Product A B => \Sigma A B

\class HasCoproduct (E : \Type)
  | Coproduct \alias \infixl 6 ⨿ : E -> E -> E

\instance TypeHasCoproduct.{u} : HasCoproduct (\Type u)
  | Coproduct A B => Or A B

\instance SetHasCoproduct.{u} : HasCoproduct (\Set u)
  | Coproduct A B => Or A B