{-# OPTIONS --without-K --exact-split --safe #-} open import Fragment.Algebra.Signature open import Relation.Binary using (Setoid) module Fragment.Algebra.Free.Syntax {a ℓ} (Σ : Signature) (A : Setoid a ℓ) where open import Fragment.Algebra.Algebra Σ open import Fragment.Algebra.Free.Base Σ open import Data.Fin using (Fin) open import Data.Vec using ([]; _∷_) module _ {n} where ⟨_⟩ : Fin n → ∥ Free (Atoms A n) ∥ ⟨ n ⟩ = atom (dyn n) ⟨_⟩ₛ : Setoid.Carrier A → ∥ Free (Atoms A n) ∥ ⟨ x ⟩ₛ = atom (sta x) ⟨_⟩₀ : ops Σ 0 → ∥ Free (Atoms A n) ∥ ⟨ f ⟩₀ = term f [] ⟨_⟩₁_ : ops Σ 1 → ∥ Free (Atoms A n) ∥ → ∥ Free (Atoms A n) ∥ ⟨ f ⟩₁ t = term f (t ∷ []) _⟨_⟩₂_ : ∥ Free (Atoms A n) ∥ → ops Σ 2 → ∥ Free (Atoms A n) ∥ → ∥ Free (Atoms A n) ∥ s ⟨ f ⟩₂ t = term f (s ∷ t ∷ [])