1
------------------------------------------------------------------------
2
-- Indexed applicative functors
3
------------------------------------------------------------------------
5
-- Note that currently the applicative functor laws are not included
8
module Category.Applicative.Indexed where
10
open import Data.Function
11
open import Data.Product
12
open import Category.Functor
15
IFun I = I → I → Set → Set
17
record RawIApplicative {I : Set} (F : IFun I) : Set₁ where
18
infixl 4 _⊛_ _<⊛_ _⊛>_
22
pure : ∀ {i A} → A → F i i A
23
_⊛_ : ∀ {i j k A B} → F i j (A → B) → F j k A → F i k B
25
rawFunctor : ∀ {i j} → RawFunctor (F i j)
27
{ _<$>_ = λ g x → pure g ⊛ x
31
open module RF {i j : I} =
32
RawFunctor (rawFunctor {i = i} {j = j})
35
_<⊛_ : ∀ {i j k A B} → F i j A → F j k B → F i k A
36
x <⊛ y = const <$> x ⊛ y
38
_⊛>_ : ∀ {i j k A B} → F i j A → F j k B → F i k B
39
x ⊛> y = flip const <$> x ⊛ y
41
_⊗_ : ∀ {i j k A B} → F i j A → F j k B → F i k (A × B)
42
x ⊗ y = (_,_) <$> x ⊛ y