
Swift Functional Programming
By :

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
type in a protocol
as really being Self<T>
, it allows us to talk about the relationship between Self<T>
and Self<U>
for some other type U
. For instance, it could allow the map
operation on a collection to return a collection of the same kind...