Fun with Sums, Products, Exponents and Types
Here's the sum of cows with tigers and elephants:
Here's a product of cows with tigers and elephants:
Here's the exponents of cows with tigers and elephants:
If we have a getCow method that will return DressedCows and if we have 3 types of DressedCows then if we call getCow then there are 31 possible DressedCows that it can return.
Note that functions with no arguments are Units. A Unit is a singleton type that carries no information. In Chapter 9, Functors, Monoids, and Generics,we'll see how Units are useful when we build a 12-hour clock functor and when writing a reduce function. A Unit is our identity morphism.
Looking at structures algebraically lets us find matching structure.
Once we've identified an isomorphism we have proven ways to optimize for memory usage, performance or data augmentation.
Proving what our code allows us to us it.
Proving what our code isn't prevents errors.
In this way, types are a fundamental part of functional programming...