{-# OPTIONS --without-K --safe #-} module Prelude.Applicative where open import Agda.Builtin.Unit open import Agda.Builtin.Bool open import Prelude.Level open import Prelude.Function open import Prelude.Functor private variable A B : Set _ record Applicative (F : ∀ {a} → Set a → Set a) : Setω where infixl 4 _<*>_ _<*_ _*>_ field pure : A → F A _<*>_ : F (A → B) → F A → F B overlap ⦃ super}} : Functor F _<*_ : {A B : Set ℓ} → F A → F B → F A a <* b = ⦇ const a b ⦈ _*>_ : {A B : Set ℓ} → F A → F B → F B a *> b = ⦇ (const id) a b ⦈ when : Bool → F ⊤ → F ⊤ when false _ = pure tt when true m = m unless : Bool → F ⊤ → F ⊤ unless true _ = pure tt unless false m = m open Applicative ⦃...⦄ public {-# DISPLAY Applicative.pure _ = pure #-} {-# DISPLAY Applicative._<*>_ _ = _<*>_ #-} {-# DISPLAY Applicative._<*_ _ = _<*_ #-} {-# DISPLAY Applicative._*>_ _ = _*>_ #-}