{-# OPTIONS --safe #-}

module Cubical.Categories.Constructions.TwistedArrow where

open import Cubical.Foundations.HLevels
open import Cubical.Foundations.Prelude

open import Cubical.Categories.Category.Base
open import Cubical.Categories.Functor.Base
open import Cubical.Categories.Constructions.Elements
open Covariant
open import Cubical.Categories.Functors.HomFunctor
open import Cubical.Categories.Constructions.BinProduct

private
  variable
     ℓ' : Level
TwistedArrowCategory : (C : Category  ℓ')  Category (ℓ-max  ℓ') ℓ'
TwistedArrowCategory C =  HomFunctor C

TwistedEnds : (C : Category  ℓ')  Functor (TwistedArrowCategory C) (C ^op ×C C)
TwistedEnds C = ForgetElements (HomFunctor C)

TwistedDom : (C : Category  ℓ')  Functor ((TwistedArrowCategory C) ^op) C
TwistedDom C = ((Fst (C ^op) C) ^opF) ∘F (ForgetElements (HomFunctor C) ^opF)

TwistedCod : (C : Category  ℓ')  Functor (TwistedArrowCategory C) C
TwistedCod C = (Snd (C ^op) C) ∘F ForgetElements (HomFunctor C)