Higher-kinded types have the ability to reason about generic types with their type parameters as variables. Functors, Monads, and Applicative Functors are higher-kinded types and are not supported natively in the Swift 3.0 type system!
For curious readers, it is recommended to read the Swift Evolution Proposal (https://lists.swift.org/pipermail/swift-evolution/Week-of-Mon-20151214/002736.html) and the Generic manifesto (https://github.com/apple/swift/blob/master/docs/GenericsManifesto.md#higher-kinded-types).
According to the Generic Manifesto, higher-kinded types allow us to express the relationship between two different specializations of the same nominal type within a protocol. For example, if we think of the Self