tidied up Either<TLeft, TRight> a bit