![Learning Functional Programming in Go](https://wfqqreader-1252317822.image.myqcloud.com/cover/487/36700487/b_36700487.jpg)
Various intermediate and terminal functions
Look at the various intermediate and terminal functions in the following functor diagram. They are all functors. When a function, for example, Map, is provided with a set of values as input, it will apply a transformation on the elements and produce output that will be a different set of values.
In functional programming, given the same input, a given function will always return the same result set.
![](https://epubservercos.yuewen.com/6176FA/19470400908922906/epubprivate/OEBPS/Images/Chapter_200.jpg?sign=1738855060-N6Y4cfcMjzXhsifHkeqWs4WEwTS873C7-0-678b6b076aadceaf82f5f30016e74617)
In the first row of preceding functors, Map and Sort, take a collection, transform it in some way, and return a collection of equal size.
In the second row of functors, Filter and GroupBy, take a collection and transform it into another collection of smaller size.
In the third row, Reduce takes a collection, performs computations over its elements, and returns a single result value.