Ancora un esperimento con gli extension method...

public static class Monad
{
  
public static Converter<List<A>, List<T>> Map<A, T>(this Converter<A, T> mapper)
  
{
     
return list => list.ConvertAll<T>(mapper);
  
}
}

Map è un extension method che data in input una funzione del tipo A -> T (dove A è il tipo del parametro di input e T il tipo del valore di ritorno), ritorna una funzione del tipo List<A> -> List<T>. In sostanza restituisce una nuova funzione che effettua la medesima trasformazione anzichè su un elemento, su una intera lista di elementi. Un esempio di codice che usa il metodo potrebbe essere:

List<string> list = new List<string> { "Red", "Green", "Blue" };
Converter<string, int> mapper = x => x.Length;
Converter<List<string>, List<int>> f = mapper.Map();

foreach (var item in f(list))
  
Console.WriteLine(item);

In questo caso mapper è una funzione che data una stringa restituisce il numero di caratteri. mapper.Map() è invece una funzione che fa la stessa cosa ma su una lista di stringhe (restituendo una lista di interi).