{-# OPTIONS --allow-unsolved-metas #-}
module Applicative where
open import Prelude
open import Algebra
module _ {đ : Type a} (mon : Monoid đ) where
open Monoid mon
constApplicative : Applicative {ââ = b} (const đ)
constApplicative .Applicative.pure _ = Îľ
constApplicative .Applicative._<*>_ = _â_
constApplicative .Applicative.pure-homo _ _ = Îľâ _
constApplicative .Applicative.<*>-interchange u _ = âÎľ u Íž sym (Îľâ _)
constApplicative .Applicative.<*>-comp u v w = cong (Îť eu â eu â v â w) (Îľâ u) Íž assoc _ _ _
idApplicative : Applicative {ââ = a} id
idApplicative .Applicative.pure = id
idApplicative .Applicative._<*>_ = _$_
idApplicative .Applicative.pure-homo f x = refl
idApplicative .Applicative.<*>-interchange u y = refl
idApplicative .Applicative.<*>-comp u v w = refl
module _ {F : Type b â Type c} {G : Type a â Type b} (fa : Applicative F) (ga : Applicative G) where
open Applicative ⌠... âŚ
instance
_ : Applicative F
_ = fa
instance
_ : Applicative G
_ = ga
composeApplicative : Applicative (F â G)
composeApplicative .Applicative.pure x = pure (pure x)
composeApplicative .Applicative._<*>_ fs xs = ⌠fs <*> xs âŚ
composeApplicative .Applicative.pure-homo f x = {!!}
composeApplicative .Applicative.<*>-interchange u y = {!!}
composeApplicative .Applicative.<*>-comp u v w = {!!}