Semi-groups are an important part of functional programming. They're not quite monoids, however, they provide us with the foundation we need to create monoids.
In this video, we'll learn about semigroups and see how they provide us with a generic interface for combining values using a
.concat method. By the end of the lesson, you will have learned about the properties that a type must possess in order to be considered a valid semigroup.