------------------------------------------------------------------------ -- The Agda standard library -- -- Base definitions for the left-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.Left.Base {a} (A : Set a) (b : 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ₗ B = A × B functor : RawFunctor Productₗ functor = record { _<$>_ = λ f → map₂ f } comonad : RawComonad Productₗ comonad = record { extract = proj₂ ; extend = < proj₁ ,_> }