{-# OPTIONS --safe --sized-types #-} module Generic.Syntax.LetBinder where open import Size open import Data.Bool open import Data.Product open import Agda.Builtin.List open import Agda.Builtin.Equality open import Function open import Relation.Unary open import Generic.Syntax private variable I : Set σ τ : I d : Desc I s : Size module _ {I : Set} where Let : Desc I Let = `σ (I × I) $ uncurry $ λ σ τ → `X [] σ (`X (σ ∷ []) τ (`∎ τ)) pattern `let'_`in'_ e t = (_ , e , t , refl) pattern `let_`in_ e t = `con (`let' e `in' t) embed : ∀[ Tm d s σ ⇒ Tm (d `+ Let) s σ ] embed = map^Tm (MkDescMorphism (true ,_))