------------------------------------------------------------------------ -- The Agda standard library -- -- Unsafe Char operations and proofs ------------------------------------------------------------------------ module Data.Char.Unsafe where open import Data.Bool.Base using (Bool; true; false) open import Relation.Nullary using (yes; no) open import Relation.Nullary.Decidable using (⌊_⌋) open import Relation.Binary using (Decidable; DecSetoid) open import Relation.Binary.PropositionalEquality as PropEq using (_≡_) open import Relation.Binary.PropositionalEquality.TrustMe open import Agda.Builtin.Char using (primCharEquality) open import Data.Char ------------------------------------------------------------------------ -- An informative equality test. infix 4 _≟_ _≟_ : Decidable {A = Char} _≡_ s₁ ≟ s₂ with primCharEquality s₁ s₂ ... | true = yes trustMe ... | false = no whatever where postulate whatever : _ ------------------------------------------------------------------------ -- Boolean equality test. -- -- Why is the definition _==_ = primCharEquality not used? One reason -- is that the present definition can sometimes improve type -- inference, at least with the version of Agda that is current at the -- time of writing: see unit-test below. infix 4 _==_ _==_ : Char → Char → Bool c₁ == c₂ = ⌊ c₁ ≟ c₂ ⌋ private -- The following unit test does not type-check (at the time of -- writing) if _==_ is replaced by primCharEquality. data P : (Char → Bool) → Set where p : (c : Char) → P (c ==_) unit-test : P ('x' ==_) unit-test = p _ ------------------------------------------------------------------------ -- Decidable equality decSetoid : DecSetoid _ _ decSetoid = PropEq.decSetoid _≟_