using System.Threading.Tasks;
public static void Main()
.Map<string, string>(x => $"hello {x}");
string foo(string x) => $"hello {x}";
.Map2(x => $"hello {x}");
public static class Ext {
public static T2 Map<T1, T2>(this T1 x, Func<T1, T2> f) => f(x);
public static async Task<T2> Map<T1, T2>(this Task<T1> x, Func<T1, T2> f) => (await x).Map(f);
public static class Ext2 {
public static T Map2<T>(this T x, Func<T, T> f) => f(x);
public static async Task<T> Map2<T>(this Task<T> x, Func<T, T> f) => (await x).Map2(f);