public static IObservable <R2> MatchObservable <L, R, R2>(this EitherUnsafe <L, IObservable <R> > self, Func <R, R2> Right, Func <L, R2> Left) =>
 self.IsRight
         ? self.CastRight().Select(Right).Select(Check.NullReturn)
         : Observable.Return(Check.NullReturn(Left(self.CastLeft())));