open import 1Lab.Path.IdentitySystem
open import 1Lab.Path
open import 1Lab.Type
open import Data.Reflection.Fixity
open import Data.String.Base
open import Data.String.Show
open import Data.Dec.Base
open import Data.Id.Base
module Data.Reflection.Name where
postulate Name : Type
{-# BUILTIN QNAME Name #-}
private module P where
primitive
primQNameEquality : Name → Name → Bool
primQNameLess : Name → Name → Bool
primShowQName : Name → String
primQNameFixity : Name → Fixity
postulate
primQNameEqualityRefl : ∀ x → primQNameEquality x x ≡ᵢ true
primQNameEqualitySound : ∀ x y → primQNameEquality x y ≡ᵢ true → x ≡ᵢ y
open P
renaming (primQNameFixity to name→fixity)
using ()
public
instance
Discrete-Name : Discrete Name
Discrete-Name .decide x y with P.primQNameEquality x y in q
... | true = yes (Id≃path.to (P.primQNameEqualitySound x y q))
... | false = no λ p → work (Id≃path.from p) q where
work : ∀ {x y} → x ≡ᵢ y → P.primQNameEquality x y ≡ᵢ false → ⊥
work {x} reflᵢ p rewrite P.primQNameEqualityRefl x with () ← p
Show-Name : Show Name
Show-Name = default-show P.primShowQName