------------------------------------------------------------------------
-- The Agda standard library
--
-- Basic type and definition of the reader monad transformer
------------------------------------------------------------------------
{-# OPTIONS --cubical-compatible --safe #-}
module Effect.Monad.Reader.Transformer.Base {r} (R : Set r) where
open import Level using (Level; suc; _⊔_)
open import Function.Base using (id)
private
  variable
    g : Level
    A : Set r
------------------------------------------------------------------------
-- Reader monad operations
record RawMonadReader
       (M : Set r → Set g)
       : Set (suc r ⊔ g) where
  field
    reader : (R → A) → M A
    local  : (R → R) → M A → M A
  ask : M R
  ask = reader id
------------------------------------------------------------------------
-- Reader monad transformer
record ReaderT
       (M : Set r → Set g)
       (A : Set r)
       : Set (r ⊔ g) where
  constructor mkReaderT
  field runReaderT : R → M A
open ReaderT public