{-# OPTIONS --without-K --safe #-}
module Prelude.Sum where

open import Agda.Primitive

infixr 1 _⊎_

data _⊎_ {a} {b} (A : Set a) (B : Set b) : Set (a ⊔ b) where
  inl : (x : A) → A ⊎ B
  inr : (y : B) → A ⊎ B

[_,_] : ∀ {a b c} {A : Set a} {B : Set b} {C : A ⊎ B → Set c} →
        ((x : A) → C (inl x)) → ((x : B) → C (inr x)) →
        ((x : A ⊎ B) → C x)
[ f , g ] (inl x) = f x
[ f , g ] (inr y) = g y

data _⊎ω_ {a} (A : Set a) (B : Setω) : Setω where
  inl : (x : A) → A ⊎ω B
  inr : (y : B) → A ⊎ω B

[_,_]ω : ∀ {a c} {A : Set a} {B : Setω} {C : A ⊎ω B → Set c} →
        ((x : A) → C (inl x)) → ((x : B) → C (inr x)) →
        ((x : A ⊎ω B) → C x)
[ f , g ]ω (inl x) = f x
[ f , g ]ω (inr y) = g y