public IFunc <IFunc <T, MyEnumerable <U> >, MyEnumerable <U> > Bind <U>(MyEnumerable <T> val) { return(new Function <IFunc <T, MyEnumerable <U> >, MyEnumerable <U> >(_f => { List <U> list = new List <U>(); foreach (T t in val) { MyEnumerable <U> _u = _f.Evaluate(t); foreach (U u in _u) { list.Add(u); } } return new MyEnumerable <U>(list); })); }
IFunc <MyEnumerable <T>, MyEnumerable <U> > Lift <U>(MyEnumerable <IFunc <T, U> > func) { return(new Function <MyEnumerable <T>, MyEnumerable <U> >(_t => { U[] list = new U[func.Count() * _t.Count()]; int index = 0; foreach (IFunc <T, U> f in func) { foreach (T t in _t) { list[index++] = f.Evaluate(t); } } return new MyEnumerable <U>(list); })); }