/// <summary>
 /// Flatten
 /// </summary>
 /// <param name="optional"></param>
 /// <typeparam name="T"></typeparam>
 /// <typeparam name="TException"></typeparam>
 /// <typeparam name="TImpl"></typeparam>
 /// <returns></returns>
 public static Either <T, TException> Flatten <T, TException, TImpl>(this IOptionalImpl <Either <T, TException>, TException, TImpl> optional) =>
 optional.FlatMap(innerOptional => innerOptional);
 /// <summary>
 /// Flatten
 /// </summary>
 /// <param name="optional"></param>
 /// <typeparam name="T"></typeparam>
 /// <typeparam name="TImpl"></typeparam>
 /// <returns></returns>
 public static Maybe <T> Flatten <T, TImpl>(this IOptionalImpl <Maybe <T>, TImpl> optional) =>
 optional.FlatMap(innerOptional => innerOptional);