Our previous example, invoking a lambda inside a wrapper with a parameter inside the same kind of wrapper, is the perfect way to introduce applicatives.
An applicative is a type that defines two functions, a pure(t: T) function that returns the T value wrapped in the applicative type, and an ap function (apply, in other languages) that receives a lambda wrapped in the applicative type.
In the previous section, when we explained monads, we made them extend directly from a functor but in reality, a monad extends from an applicative and an applicative extends from a functor. Therefore, our pseudo code for a generic applicative, and the entire hierarchy, will look like this:
interface Functor<C<_>> { //Invalid Kotlin code fun <A,B> ...