{-# OPTIONS --safe #-}
module Cubical.Categories.Constructions.Free.CartesianCategory.ProductQuiver
  where

open import Cubical.Foundations.Prelude

private variable  ℓ' : Level

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

×Quiver :   ℓ'  Type (ℓ-suc (ℓ-max  ℓ'))
×Quiver  ℓ' = Σ[ ob  Type  ] ProductQuiver ob ℓ'

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