module Chapter4.Desc.Tagged where
open import Level
open import Data.Nat hiding (suc)
open import Data.Fin hiding (suc ; lift)
open import Data.Vec
open import Data.Product
open import Chapter4.Desc
tagDesc : (ℓ : Level) → Set (suc ℓ)
tagDesc ℓ = Σ[ n ∈ ℕ ] Vec (Desc ℓ) n
toDesc : ∀{ℓ} → tagDesc ℓ → Desc ℓ
toDesc (n , ds) = `Σ (Lift (Fin n)) (λ { (lift k) → lookup k ds })
toTagged : ∀{ℓ} → Desc ℓ → tagDesc ℓ
toTagged d = ( 1 , d ∷ [])