open import Prelude

module Syntax.Simple.Signature where

private variable
  X Y : Set

record SigD : Set₁ where
  constructor sigd
  field
    Op        : Set
     decEq  : DecEq Op
    ar        : Op  
open SigD public

⟦_⟧ : SigD  Set  Set
 D  X = Σ[ i  D .Op ] X ^ D .ar i

mapⁿ : {X Y : Set} {n : } (f : X  Y)
   X ^ n  Y ^ n
mapⁿ f xs = V.map f xs

fmap : (D : SigD) (f : X  Y)
    D  X   D  Y
fmap Ds f (i , xs) = i , mapⁿ f xs

record _-Alg (D : SigD) (X :   Set) : Set₁ where
  field
    var : Fin       ⇒₁ X
    alg :  D   X ⇒₁ X
open _-Alg public