public static EitherMaybe <TLeft, TRight> Where <TLeft, TRight>(this EitherMaybe <TLeft, TRight> eitherT, Func <TRight, bool> predicate)
 {
     return(eitherT.Keep(predicate));
 }
 public static EitherMaybe <TLeft, TResult> SelectMany <TLeft, TRight, TResult>(this EitherMaybe <TLeft, TRight> eitherT, Func <TRight, EitherMaybe <TLeft, TResult> > f)
 {
     return(eitherT.Bind(f));
 }
 public static EitherMaybe <TLeft, TSelect> SelectMany <TLeft, TRight, TResult, TSelect>(this EitherMaybe <TLeft, TRight> eitherT, Func <TRight, EitherMaybe <TLeft, TResult> > f, Func <TRight, TResult, TSelect> selector)
 {
     return(eitherT.SelectMany(a => f(a).SelectMany(b => selector(a, b).ToMaybe().AsRight <TLeft, IMaybe <TSelect> >().ToEitherMaybe())));
 }
 public static EitherMaybe <TLeft, TResult> Select <TLeft, TRight, TResult>(this EitherMaybe <TLeft, TRight> eitherT, Func <TRight, TResult> f)
 {
     return(eitherT.FMap(f));
 }