Multimethods are similar to interfaces, they allow you to write a common contract and then a family of functions can fulfill that interface with a specific implementation.
They are extremely flexible, as you will see they grant you a very fine control over what function is going to get invoked for a specific data object.
Multimethods consist of three parts:
One of the most interesting features of multimethods is that you can implement new functions for already existing types without having to write wrappers around your currently existing object.
The multimethod declaration works the same way as the interface; you define a common ...