Applicative functor

In functional programming, an applicative functor, or an applicative for short, is an intermediate structure between functors and monads. In Category Theory they are called Closed Monoidal Functors. Applicative functors allow for functorial computations to be sequenced (unlike plain functors), but don't allow using results from prior computations in the definition of subsequent ones (unlike monads). Applicative functors are the programming equivalent of lax monoidal functors with tensorial strength in category theory.

Applicative functors were introduced in 2008 by Conor McBride and Ross Paterson in their paper Applicative programming with effects.

Applicative functors first appeared as a library feature in Haskell, but have since spread to other languages as well, including Idris, Agda, OCaml, Scala and F#. Glasgow Haskell, Idris, and F# offer language features designed to ease programming with applicative functors. In Haskell, applicative functors are implemented in the  type class.

While in languages like Haskell monads are applicative functors, it is not always so in general settings of Category Theory - examples of monads that are not strong can be found on Math Overflow.

Definition
In Haskell, an applicative is a parameterized type that we think of as being a container for data of the parameter type plus two methods  and. The  method for an applicative of parameterized type   has type and can be thought of as bringing values into the applicative. The method for an applicative of type   has type and can be thought of as the equivalent of function application inside the applicative.

Alternatively, instead of providing, one may provide a function called. These two functions may be defined in terms of each other; therefore only one is needed for a minimally complete definition.

Applicatives are also required to satisfy four equational laws:
 * Identity:
 * Composition:
 * Homomorphism:
 * Interchange:

Every applicative is a functor. To be explicit, given the methods  and,   can be implemented as

The commonly-used notation is equivalent to.

Examples
In Haskell, the Maybe type can be made an instance of the type class  using the following definition: As stated in the Definition section,  turns an   into a, and  applies a Maybe function to a Maybe value. Using the Maybe applicative for type  allows one to operate on values of type   with the error being handled automatically by the applicative machinery. For example, to add and, one needs only write For the non-error case, adding and  gives. If either of or  is, then the result will be  also. This example also demonstrates how applicatives allow a sort of generalized function application.