Either represents the possibility of a function having one of two alternative results which can't be represented by a single type.
For example, let's imagine that we have a new simulation system that replaced an old one. The new system is very popular, and so is constantly under load and thus not always available. The old one is kept as a fallback for this reason. Unfortunately, the results of the simulation have very different formats for both systems. Hence, it makes sense to represent them as Either:
type OldFormat
type NewFormat
def runSimulation(): Either[OldFormat, NewFormat]
If this example gives you the feeling that types of alternatives must be related, then you are getting the wrong feeling. Usually, the types of the results would be completely unrelated. To illustrate this, let's consider another example.
As we're fishing, there is the possibility...