* Can be used as unordered function parameters. This is useful when you are trying to unify duplicated code. Unordered parameter lists are very beneficial when you are unifying code that has common parameters but they are in different order. * Instead of adding or removing a function parameter, using an implicit parameter gives less confusing error messages. Once the code works with the implicit parameter converting it to a real function parameter is easier. * Constraint can be bundled into a type alias.