Agda-2.3.2.2: examples/lib/Logic/Structure/Applicative.agda
module Logic.Structure.Applicative where
data Applicative (f : Set -> Set) : Set1 where
applicative :
(pure : {a : Set} -> a -> f a)
(_<*>_ : {a b : Set} -> f (a -> b) -> f a -> f b) ->
Applicative f
module Applicative {f : Set -> Set}(App : Applicative f) where
private
pure' : Applicative f -> {a : Set} -> a -> f a
pure' (applicative p _) = p
app' : Applicative f -> {a b : Set} -> f (a -> b) -> f a -> f b
app' (applicative _ a) = a
pure : {a : Set} -> a -> f a
pure = pure' App
_<*>_ : {a b : Set} -> f (a -> b) -> f a -> f b
_<*>_ = app' App