Functors
Go has three predeclared/raw data types: bool, string, numeric (float, int64, and so on). Other data types in Go require type declarations, that is, they require we use the type keyword. Functions fall in the later category of data types along with array, struct, pointer, interface, slice, map, and channel types. In Go, functions are first-class data types, which means that can be passed around as parameters and returned as values. Functions that can take functions as arguments and return functions are called high-order functions.
We can write function factories--functions that return functions--and even function factory factories. We can also write functions that modify functions or create functions for specific purposes.
Functors: A functor is a collection of X variables that can apply a function, f, over itself to create a collection of Y, that is, f (X) → Y. (To see what we're talking about here, take a quick look at the Fingers times 10 functor example in Chapter 9, Functors, Monoids, and Generics)
Note that the Prolog software language defines a functor to simply be a function. The preceding definition comes from the Category Theory influence on functional programming. (For more details, see Chapter 11, Category Theory That Applies.)