More high-order functions

Now, let's return to main.go to look at a few more HOFs in action.

We apply our ByMake filter and a new type of reducer. This reducer, Reducer2, will return a slice of CarTypes rather than JSON:

PrintCars2("Reduce - Lexus",
cars.Filter(ByMake("Lexus")).
Reduce2(CarTypeReducer(cars), []CarType{}))

Here's the output of this:

Reduce - Lexus
-----------------------
car: {Lexus IS250}
car: {Lexus SC 430}

The following is another example that shows how easy chaining, also known as function composition, is:

PrintCars("ByModel - Accord up/downgraded",
cars.Filter(ByModel("Accord")).
Map(Upgrade()).
Map(Downgrade()))

Here's the output of this:

ByModel - Accord up/downgraded
-----------------------
car: Honda Accord
car: Honda Accord ES2

We saw how the Upgrade map function adds the appropriate label to the end of the car model. By applying Downgrade after Upgrade, we effectively undo Upgrade.