{-# OPTIONS --without-K --safe #-}
module EqBool where
open import Data.Bool
record HasEqBool {a} (A : Set a) : Set a where
field _==_ : A → A → Bool
open HasEqBool ⦃ ... ⦄ public
open import Data.List as List using (List; _∷_; [])
==[] : ∀ {a} {A : Set a} → ⦃ _ : HasEqBool A ⦄ → List A → List A → Bool
==[] [] [] = true
==[] [] (x ∷ ys) = false
==[] (x ∷ xs) [] = false
==[] (x ∷ xs) (y ∷ ys) = x == y ∧ ==[] xs ys
instance
eqList : ∀ {a} {A : Set a} → ⦃ _ : HasEqBool A ⦄ → HasEqBool (List A)
_==_ ⦃ eqList ⦄ = ==[]
open import Data.Nat using (ℕ)
instance
eqNat : HasEqBool ℕ
_==_ ⦃ eqNat ⦄ = Agda.Builtin.Nat._==_
where import Agda.Builtin.Nat
instance
eqBool : HasEqBool Bool
_==_ ⦃ eqBool ⦄ false false = true
_==_ ⦃ eqBool ⦄ false true = false
_==_ ⦃ eqBool ⦄ true y = y
open import Data.String using (String)
instance
eqString : HasEqBool String
_==_ ⦃ eqString ⦄ = Data.String._==_
where import Data.String