Source code on Github{-# OPTIONS --safe #-}
module Prelude.DecEq.Core where
open import Prelude.Init; open SetAsType
private variable A : Type ℓ; B : Type ℓ′
record DecEq (A : Type ℓ) : Type ℓ where
field _≟_ : Decidable² {A = A} _≡_
_==_ : A → A → Bool
x == y = ⌊ x ≟ y ⌋
_≠_ : A → A → Bool
x ≠ y = not (x == y)
infix 4 _≟_ _==_ _≠_
open DecEq ⦃...⦄ public
Irrelevant⇒DecEq : Irrelevant A → DecEq A
Irrelevant⇒DecEq ∀≡ ._≟_ = yes ∘₂ ∀≡
instance
DecEq-⊤ : DecEq ⊤
DecEq-⊤ ._≟_ = Unit._≟_
DecEq-⊎ : ⦃ _ : DecEq A ⦄ ⦃ _ : DecEq B ⦄ → DecEq (A ⊎ B)
DecEq-⊎ ._≟_ = Sum.≡-dec _≟_ _≟_
DecEq-Bool : DecEq Bool
DecEq-Bool ._≟_ = B._≟_
DecEq-ℕ : DecEq ℕ
DecEq-ℕ ._≟_ = Nat._≟_
DecEq-ℤ : DecEq ℤ
DecEq-ℤ ._≟_ = Integer._≟_
DecEq-Char : DecEq Char
DecEq-Char ._≟_ = Ch._≟_
DecEq-Fin : ∀ {n} → DecEq (Fin n)
DecEq-Fin ._≟_ = F._≟_
DecEq-String : DecEq String
DecEq-String ._≟_ = Str._≟_
DecEq-List : ⦃ _ : DecEq A ⦄ → DecEq (List A)
DecEq-List ._≟_ = L.≡-dec _≟_
DecEq-Vec : ⦃ _ : DecEq A ⦄ → ∀ {n} → DecEq (Vec A n)
DecEq-Vec ._≟_ = V.≡-dec _≟_
DecEq-Maybe : ⦃ _ : DecEq A ⦄ → DecEq (Maybe A)
DecEq-Maybe ._≟_ = M.≡-dec _≟_
DecEq-These : ⦃ DecEq A ⦄ → ⦃ DecEq B ⦄ → DecEq (These A B)
DecEq-These ._≟_ = ∣These∣.≡-dec _≟_ _≟_
open Meta
DecEq-Name : DecEq Name
DecEq-Name ._≟_ = RName._≟_
where import Reflection.Name as RName
DecEq-Term : DecEq Term
DecEq-Term ._≟_ = RTerm._≟_
where import Reflection.Term as RTerm
DecEq-Arg : ⦃ _ : DecEq A ⦄ → DecEq (Arg A)
DecEq-Arg ._≟_ = RArg.≡-dec _≟_
where import Reflection.Argument as RArg
DecEq-Vis : DecEq Visibility
DecEq-Vis ._≟_ = RVis._≟_
where import Reflection.Argument.Visibility as RVis