public static IDataflow <Either <TLeft, IGroupedDataflow <TKey, TRight> > > GroupBySafe <TLeft, TRight, TKey>(
     this IDataflow <Either <TLeft, TRight> > source, Func <TRight, TKey> keySelector)
 {
     return(source
            .GroupBy(item => item.IsRight)
            .SelectMany(
                group => group.Key
                 ? group
                .Rights()
                .GroupBy(keySelector)
                .Select(Right <TLeft, IGroupedDataflow <TKey, TRight> >)
                 : group
                .Lefts()
                .Select(Left <TLeft, IGroupedDataflow <TKey, TRight> >)));
 }