Beispiel #1
0
        public static TMonadPlus MFilter <TMonadPlus, TA>(Func <TA, bool> p, IMonadPlus <TA> ma)
            where TMonadPlus : IMonadPlus <TA>
        {
            var monadPlusAdapter = MonadPlusAdapterRegistry.Get <TA>(typeof(TMonadPlus));

            return((TMonadPlus)monadPlusAdapter.Bind(
                       ma, a => p(a) ? monadPlusAdapter.Return(a) : monadPlusAdapter.MZero));
        }
Beispiel #2
0
        /// <inheritdoc />
        public IMonadPlus <T> Mplus(IMonadPlus <T> that)
        {
            if (that == null || !(that is IEnumerable <T>))
            {
                throw new InvalidCastException();
            }

            var thatXs = (IEnumerable <T>)that;


            return(AppendRange(thatXs));
        }
Beispiel #3
0
 public abstract IMonadPlus <TA> MPlus(IMonadPlus <TA> xs, IMonadPlus <TA> ys);
Beispiel #4
0
 public override IMonadPlus <TAOuter> MPlus(IMonadPlus <TAOuter> xs, IMonadPlus <TAOuter> ys)
 {
     return(((Maybe <TAOuter>)xs).Match(_ => xs, () => ys));
 }