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.
Note
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...