Пример #1
0
 /// <summary>
 /// Returns <paramref name="b"/> if <paramref name="a"/> has value, otherwise <see cref="Maybe&lt;T&gt;.Nothing"/>
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <typeparam name="T2"></typeparam>
 /// <param name="a"></param>
 /// <param name="b"></param>
 /// <returns></returns>
 public static Maybe <T2> Compose <T, T2>(this Maybe <T> a, Maybe <T2> b)
 {
     if (a.IsNothing())
     {
         return(Maybe <T2> .Nothing);
     }
     return(b);
 }
Пример #2
0
 /// <summary>
 /// Returns <paramref name="a"/>.Value or throws <paramref name="e"/>()
 /// </summary>
 /// <typeparam name="T"></typeparam>
 /// <param name="a"></param>
 /// <param name="e"></param>
 /// <returns></returns>
 public static T OrElse <T>(this Maybe <T> a, Func <Exception> e)
 {
     if (a.IsNothing())
     {
         throw e();
     }
     return(a.Value);
 }
Пример #3
0
        private static IEnumerable <TFlatten> Flatten <TMaybe, TFlatten>(this Maybe <TMaybe> maybe, Func <TMaybe, Maybe <TMaybe> > parentSelector, List <TFlatten> acc, Func <TMaybe, TFlatten> flattenSelector)
        {
            while (true)
            {
                if (maybe.IsNothing())
                {
                    return(acc);
                }

                acc.Add(flattenSelector(maybe.Value));
                maybe = parentSelector(maybe.Value);
            }
        }