Func<A, B>, List<A> -> List<B>
That said, in C#, you can write: List<A> listA;
Task<A> taskA;
Func<A, B> func;
List<B> listB = from i in listA select func(i);
Task<B> taskB = from t in taskA select func(t);
And if it can resolve a method on List<T> called 'Select' that takes a Func<T, S> that returns a List<S>, and a method on Task<T> called 'Select' that takes a Func<T, S> that returns a Task<S> this will compile.In other words, I kind of think that Select methods (which can be Select extension methods, of course) amount to functors in C#?