In the functional programming paradigm, functions are things in their own right. And if functions are things, then they can be passed as input to other functions:
Or they can be returned as the output of a function:
Or they can be passed as a parameter to a function to control its behavior:
Treating functions as things opens up a world of possibilities. It’s hard to get your head around at first, but you can already see that even ...