This typeclass with its implicit instances decides how two containers should be joined.
Supported containers are
Id for scalar values
Option for optional values
Seq for a vector of values
Those container types form an ordering from most specific to most abstract:
Id contains always one value
Option contains always zero or one value
Seq can contain any number of values
The rule to determine what the result type of joining two container types is that the result
is as generic as the more generic of both of the input types.
The implicit definitions in the companion object of join form evidence for this ordering.
This typeclass with its implicit instances decides how two containers should be joined.
Supported containers are
Idfor scalar valuesOptionfor optional valuesSeqfor a vector of valuesThose container types form an ordering from most specific to most abstract:
Idcontains always one valueOptioncontains always zero or one valueSeqcan contain any number of valuesThe rule to determine what the result type of joining two container types is that the result is as generic as the more generic of both of the input types.
The implicit definitions in the companion object of join form evidence for this ordering.