{-# OPTIONS --without-K --safe #-}
open import Prelude
module Generics.Reflection.Name where
open import Utils.Reflection
open import Utils.Error as Err
open import Generics.Description
open import Generics.Recursion
open import Generics.Reflection.Telescope
DataToNativeName : (D : DataD) (N : DataT D) → TC Name
DataToNativeName D N = do
exCxtℓs #levels λ ℓs → let Desc = applyL ℓs in
exCxtTel (PDataD.Param Desc) λ ps →
exCxtTel (PDataD.Index Desc ps) λ is → do
(def n _) ← quoteTC! (N ℓs ps is)
where t → notData t
return n
where open DataD D
FoldPToNativeName : FoldP → TC Name
FoldPToNativeName P = do
exCxtℓs (DataD.#levels Desc) λ ℓs →
exCxtTel (PDataD.Param (DataD.applyL Desc ℓs)) λ ps →
exCxtTel (PDataD.Index (DataD.applyL Desc ℓs) ps) λ is → do
(def d _) ← quoteTC! $ Native ℓs ps is
where t → IMPOSSIBLE
return d
where open FoldP P
IndPToNativeName : IndP → TC Name
IndPToNativeName P = do
exCxtℓs (DataD.#levels Desc) λ ℓs →
exCxtTel (PDataD.Param (DataD.applyL Desc ℓs)) λ ps →
exCxtTel (PDataD.Index (DataD.applyL Desc ℓs) ps) λ is → do
(def d _) ← quoteTC! $ Native ℓs ps is
where t → IMPOSSIBLE
return d
where open IndP P