{- This second-order signature was created from the following second-order syntax description: syntax Lens | L type S : 0-ary A : 0-ary term get : S -> A put : S A -> S theory (PG) s : S a : A |> get (put (s, a)) = a (GP) s : S |> put (s, get(s)) = s (PP) s : S a b : A |> put (put(s, a), b) = put (s, a) -} module Lens.Signature where open import SOAS.Context -- Type declaration data LT : Set where S : LT A : LT open import SOAS.Syntax.Signature LT public open import SOAS.Syntax.Build LT public -- Operator symbols data Lₒ : Set where getₒ putₒ : Lₒ -- Term signature L:Sig : Signature Lₒ L:Sig = sig λ { getₒ → (⊢₀ S) ⟼₁ A ; putₒ → (⊢₀ S) , (⊢₀ A) ⟼₂ S } open Signature L:Sig public