@@ -4,36 +4,50 @@ module Class.MonadReader where
44
55open import Meta.Prelude
66
7- open import Class.Monad
7+ open import Class.Core
88open import Class.Functor
9+ open import Class.Applicative
10+ open import Class.Monad
911open import Class.MonadError
1012
1113open MonadError ⦃...⦄
1214
13- record MonadReader (R : Set ℓ) (M : ∀ {a} → Set a → Set a ) ⦃ _ : Monad M ⦄ : Setω where
15+ record MonadReader (R : Set ℓ) (M : Type↑ ) ⦃ _ : Monad M ⦄ : Setω where
1416 field
1517 ask : M R
1618 local : ∀ {a} {A : Set a} → (R → R) → M A → M A
1719
1820 reader : ∀ {a} {A : Set a} → (R → A) → M A
1921 reader f = f <$> ask
20- where instance _ = Functor-M
2122
2223open MonadReader ⦃...⦄
2324
2425ReaderT : (R : Set ) (M : ∀ {a} → Set a → Set a) → ∀ {a} → Set a → Set a
2526ReaderT R M A = R → M A
2627
27- module _ {R : Set } {M : ∀ {a} → Set a → Set a} ⦃ _ : Monad M ⦄ where
28+ module _ {R : Set } {M : ∀ {a} → Set a → Set a} where
29+
30+ Functor-ReaderT : ⦃ Functor M ⦄ → Functor (ReaderT R M)
31+ Functor-ReaderT ._<$>_ f ra r = f <$> ra r
32+
33+ instance _ = Functor-ReaderT
34+
35+ Applicative-ReaderT : ⦃ Applicative M ⦄ → Applicative (ReaderT R M)
36+ Applicative-ReaderT .pure a = const (pure a)
37+ Applicative-ReaderT ._<*>_ rf ra r = rf r <*> ra r
38+
39+ instance _ = Applicative-ReaderT
40+
41+ Monad-ReaderT : ⦃ Monad M ⦄ → Monad (ReaderT R M)
42+ Monad-ReaderT .return a _ = return a
43+ Monad-ReaderT ._>>=_ x f r = x r >>= flip f r
2844
29- Monad-ReaderT : Monad (ReaderT R M)
30- Monad-ReaderT .return a = λ r → return a
31- Monad-ReaderT ._>>=_ x f = λ r → x r >>= λ a → f a r
45+ instance _ = Monad-ReaderT
3246
33- MonadReader-ReaderT : MonadReader R (ReaderT R M) ⦃ Monad-ReaderT ⦄
34- MonadReader-ReaderT .ask = λ r → return r
47+ MonadReader-ReaderT : ⦃ _ : Monad M ⦄ → MonadReader R (ReaderT R M)
48+ MonadReader-ReaderT .ask r = return r
3549 MonadReader-ReaderT .local f x = x ∘ f
3650
3751 MonadError-ReaderT : ∀ {e} {E : Set e} → ⦃ MonadError E M ⦄ → MonadError E (ReaderT R M)
38- MonadError-ReaderT .error e = λ r → error e
39- MonadError-ReaderT .catch x h = λ r → catch (x r) (λ e → h e r)
52+ MonadError-ReaderT .error e _ = error e
53+ MonadError-ReaderT .catch x h r = catch (x r) (flip h r)
0 commit comments