:PROPERTIES: :ID: 10eb4672-19ab-4275-a110-5446c96e7e24 :END: #+title: Applicative In [[id:9e68d422-cced-4177-96d1-90f777b9a493][Software Development]], this refers to a [[id:7a19b34d-c4bb-462b-8fae-581bf06dfdc4][Functor]] that provides a method for applying a function wrapped in such a type to a value wrapped in the same type. In [[id:9ac78677-2602-4a06-af0a-4ed82e98a9b6][Haskell]], the function for applying a wrapped function to a value wrapped in the same type is available as the infix operator =<*>=, and facilitates the application of a function taking an arbitrary number of arguments over multiple wrapped values. An applicative must also implement the =pure= function, which takes a single argument and returns it wrapped. #+caption: Applicative functions in Haskell #+begin_src haskell :exports code pure :: Applicative f => a -> f a (<*>) :: Applicative f => f (a -> b) -> f a -> f b #+end_src In the following example, =fmap= (=<$>=) first applies the =add= function to the value =Just 1=, resulting in a function of the type =Just (Int -> Int)=. The applicative infix operator (=<*>=) then applies that function to the remaining value =Just 2=, resulting in =Just 3=. #+caption: Applying a function over multiple wrapped values #+begin_src haskell :cache yes :exports both add :: Int -> Int -> Int add x y = x + y add <$> Just 1 <*> Just 2 #+end_src #+RESULTS[10751e7c3100f27569974ee18b3f34498166dfc5]: : Prelude> Just 3