Higher Order Functions
At this point, we've explored the concept of computation as evaluation, passing around values and reducing expressions to values as well. We have seen how we are allowed a great deal of versatility while maintaining type safety in SML's type system, and how we can construct arbitrary datatypes to be passed around as first class citizens, that is being able to be manipulated the same as any other value. We will now discuss what is considered one of the most powerful tools available in functional programming languages - that is, the exploitation of functions themselves as values, with which we can further parameterize our functions and results.