------------------------------------------------------------------------
-- The Agda standard library
--
-- Base definitions for the right-biased universe-sensitive functor
-- and monad instances for the Product type.
--
-- To minimize the universe level of the RawFunctor, we require that
-- elements of B are "lifted" to a copy of B at a higher universe level
-- (a ⊔ b). See the Data.Product.Effectful.Examples for how this is
-- done.
------------------------------------------------------------------------
{-# OPTIONS --cubical-compatible --safe #-}
open import Level
module Data.Product.Effectful.Right.Base
{b} (B : Set b) (a : Level) where
open import Data.Product.Base using (_×_; map₁; proj₁; proj₂; <_,_>)
open import Effect.Functor using (RawFunctor)
open import Effect.Comonad using (RawComonad)
------------------------------------------------------------------------
-- Definitions
Productᵣ : Set (a ⊔ b) → Set (a ⊔ b)
Productᵣ A = A × B
functor : RawFunctor Productᵣ
functor = record { _<$>_ = map₁ }
comonad : RawComonad Productᵣ
comonad = record
{ extract = proj₁
; extend = <_, proj₂ >
}