Exemple #1
0
        public static MList <T> Concat(MList <MList <T> > monad)
        {
            List <T> list = new List <T>();

            foreach (MList <T> ml in monad)
            {
                foreach (T t in ml)
                {
                    list.Add(t);
                }
            }
            return(new MList <T>(list));
        }
        public ListMatch <T, V> Filled(Func <T, MList <T>, V> f)
        {
            MList <T> m = Value;

            if (m != null && m.Length > 0)
            {
                return(new ListMatch <T, V>(m, f(m.Head, m.Tail)));
            }
            else
            {
                return(this);
            }
        }
        public ListMatch <T, V> Empty(Func <V> f)
        {
            MList <T> m = Value;

            if (m == null || m.Length > 0)
            {
                return(this);
            }
            else
            {
                return(new ListMatch <T, V>(f()));
            }
        }
Exemple #4
0
        public static Func <MList <T>, MList <U> > ApS <U>(MList <Func <T, U> > appl)
        {
            return(_t =>
            {
                List <U> list = new List <U>();
                foreach (Func <T, U> f in appl)
                {
                    foreach (T t in _t)
                    {
                        list.Add(f(t));
                    }
                }

                return new MList <U>(list);
            });
        }
 public static new ListMatch <T, V> New(MList <T> mlist, V item)
 {
     return(new ListMatch <T, V>(mlist, item));
 }
 public ListMatch(MList <T> mlist, V item) : base(mlist, item)
 {
 }
Exemple #7
0
 public MList <U> Ap <U>(MList <Func <T, U> > appl)
 {
     return(MList <T> .ApS(appl)(this));
 }
Exemple #8
0
 public static MList <T> Join(MList <MList <T> > list)
 {
     return(Concat(list));
 }
Exemple #9
0
 public MList <U> Then <U>(MList <U> monad)
 {
     return(monad);
 }
Exemple #10
0
 public MList <U> Bind <U>(Func <T, MList <U> > f)
 {
     return(MList <U> .Join(FMap(f)));
 }