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.Word.Base
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
  primQNameToWord64s          : Name  Σ Word64  _  Word64)
  primQNameToWord64sInjective :  x y  primQNameToWord64s x ≡ᵢ primQNameToWord64s y  x ≡ᵢ y
  primQNameFixity             : Name  Fixity

open P
  renaming (primQNameFixity to name→fixity)
  using ()
  public

instance
  Discrete-Name : Discrete Name
  Discrete-Name = Discrete-inj' _ (P.primQNameToWord64sInjective _ _)

  Show-Name : Show Name
  Show-Name = default-show P.primShowQName