← Back

Modules

Leios

  • Abstract
  • Base
  • Blocks
  • Config
  • Defaults
  • FFD
  • Foreign.BaseTypes
  • Foreign.HsTypes
  • Foreign.Types
  • Foreign.Util
  • KeyRegistration
  • Network
  • Prelude
  • Protocol
  • Short
  • Short.Decidable
  • Short.Trace.Verifier
  • Short.Trace.Verifier.Test
  • Simplified
  • Simplified.Deterministic
  • SpecStructure
  • Traces
  • Voting
  • VRF
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
{-# OPTIONS --without-K #-}
module Class.DecEq.Instances where
 
open import Class.Prelude
open import Class.DecEq.Core
 
-- ** basic types
instance
DecEq-⊥ = DecEq ⊥ ∋ λ where ._≟_ ()
DecEq-⊤ = DecEq _ ∋ record {M} where import Data.Unit as M
DecEq-Bool = DecEq _ ∋ record {M} where import Data.Bool as M
DecEq-ℕ = DecEq _ ∋ record {M} where import Data.Nat as M
DecEq-ℤ = DecEq _ ∋ record {M} where import Data.Integer as M
DecEq-ℚ = DecEq _ ∋ record {M} where import Data.Rational.Properties as M
DecEq-Char = DecEq _ ∋ record {M} where import Data.Char as M
DecEq-String = DecEq _ ∋ record {M} where import Data.String as M
 
DecEq-Fin : DecEq¹ Fin
DecEq-Fin = record {M} where import Data.Fin as M
 
DecEq-List : ⦃ DecEq A ⦄ → DecEq (List A)
DecEq-List ._≟_ = M.≡-dec _≟_ where import Data.List.Properties as M
 
-- ** containers of decidably equal elements
private
∷-injective : ∀ {x y xs ys} →
(List⁺ A ∋ x ∷ xs) ≡ y ∷ ys → x ≡ y × xs ≡ ys
∷-injective refl = (refl , refl)
module _ ⦃ _ : DecEq A ⦄ where instance
DecEq-List⁺ : DecEq (List⁺ A)
DecEq-List⁺ ._≟_ (x ∷ xs) (y ∷ ys)
with x ≟ y
... | no x≢y = no $ x≢y ∘ proj₁ ∘ ∷-injective
... | yes refl
with xs ≟ ys
... | no xs≢ys = no $ xs≢ys ∘ proj₂ ∘ ∷-injective
... | yes refl = yes refl
 
DecEq-Vec : DecEq¹ (Vec A)
DecEq-Vec ._≟_ = M.≡-dec _≟_
where import Data.Vec.Properties as M
 
DecEq-Maybe : DecEq (Maybe A)
DecEq-Maybe ._≟_ = M.≡-dec _≟_
where import Data.Maybe.Properties as M
 
module _ ⦃ _ : DecEq A ⦄ ⦃ _ : DecEq B ⦄ where
 
-- Not exported as instance so that users can also choose `Class.DecEq.WithK.DecEq-Σ`
DecEq-× : DecEq (A × B)
DecEq-× ._≟_ = ×.≡-dec _≟_ _≟_
where import Data.Product.Properties as ×
 
instance
DecEq-⊎ : DecEq (A ⊎ B)
DecEq-⊎ ._≟_ = ⊎.≡-dec _≟_ _≟_
where import Data.Sum.Properties as ⊎
 
DecEq-These : DecEq (These A B)
DecEq-These ._≟_ = M.≡-dec _≟_ _≟_
where import Data.These.Properties as M
 
-- ** reflection
instance
DecEq-Name = DecEq _ ∋ record {M} where import Reflection.AST.Name as M
DecEq-Lit = DecEq _ ∋ record {M} where import Reflection.AST.Literal as M
DecEq-Meta = DecEq _ ∋ record {M} where import Reflection.AST.Meta as M
DecEq-Term = DecEq _ ∋ record {M} where import Reflection.AST.Term as M
DecEq-Mod = DecEq _ ∋ record {M}
where import Reflection.AST.Argument.Modality as M
DecEq-Vis = DecEq _ ∋ record {M}
where import Reflection.AST.Argument.Visibility as M
DecEq-ArgI = DecEq _ ∋ record {M}
where import Reflection.AST.Argument.Information as M
 
-- put this last to work around Agda issue #6976
DecEq-Arg : ⦃ DecEq A ⦄ → DecEq (Arg A)
DecEq-Arg ._≟_ = M.≡-dec _≟_ where import Reflection.AST.Argument as M