{-# OPTIONS --without-K --safe #-}
module Data.Singleton where
open import Level using (Level; levelOfType)
open import Data.Empty.Polymorphic using (⊥)
open import Data.Maybe.Base using (Maybe; nothing; just)
open import Data.Sum.Base using (_⊎_; inj₁; inj₂)
private
variable
a b : Level
A : Set a
B : Set b
infix 0 _!
data Singleton {A : Set a} : A → Set a where
_! : (a : A) → Singleton a
fromJust : Maybe A → Set (levelOfType A)
fromJust (just a) = Singleton a
fromJust nothing = ⊥
fromInj₁ : A ⊎ B → Set (levelOfType A)
fromInj₁ (inj₁ a) = Singleton a
fromInj₁ (inj₂ _) = ⊥
fromInj₂ : A ⊎ B → Set (levelOfType B)
fromInj₂ (inj₁ _) = ⊥
fromInj₂ (inj₂ b) = Singleton b