{-# OPTIONS --safe #-}
{-# OPTIONS --lossy-unification #-}

module Cubical.Categories.Constructions.Free.CartesianClosedCategory.Quiver where

open import Cubical.Foundations.Prelude

private variable  ℓ' : Level

module _ (ob : Type ) where
  data Expr : Type  where
    ↑_ : ob  Expr
    _×_ : Expr  Expr  Expr
     : Expr
    _⇒_ : Expr  Expr  Expr
  record Quiver ℓ' : Type (ℓ-suc (ℓ-max  ℓ')) where
    field
      mor : Type ℓ'
      dom : mor  Expr
      cod : mor  Expr

×⇒Quiver :   ℓ'  Type _
×⇒Quiver  ℓ' = Σ[ ob  Type  ] Quiver ob ℓ'

module ×⇒QuiverNotation (Q : ×⇒Quiver  ℓ') where
  open Quiver
  Ob = Expr (Q .fst)
  Dom = Q .snd .dom
  Cod = Q .snd .cod