Wonderful article — I like step by step explanation.
I think there is a typos in code examples:
Future.successful is missing in Naive approach like this:
A union type is something which can be realised as one of many (usually two) types. Either is an example in scala — Either can be Left[A] or Right[B]— a value of either type can be used in a place where we ask for an Either[A,B].