using System;
public static class Exts
{
public static Func<T1, R> then<T1,T2,R>(this Func<T1, T2> f, Func<T2, R> g)
{
return (x) => g(f(x));
}
}
public class Test
{
public static void Main()
{
Func<int,int> f = (x) => (x * 2);
Func<int,int> g = (y) => (y + 10);
Func<int,int> h = f.then(g);
System.Console.WriteLine(h(10));
}
}
dXNpbmcgU3lzdGVtOwoKcHVibGljIHN0YXRpYyBjbGFzcyBFeHRzCnsKICAgIHB1YmxpYyBzdGF0aWMgRnVuYzxUMSwgUj4gdGhlbjxUMSxUMixSPih0aGlzIEZ1bmM8VDEsIFQyPiBmLCBGdW5jPFQyLCBSPiBnKQogICAgewogICAgICAgIHJldHVybiAoeCkgPT4gZyhmKHgpKTsKICAgIH0KfQoKcHVibGljIGNsYXNzIFRlc3QKewogICAgCiAgICBwdWJsaWMgc3RhdGljIHZvaWQgTWFpbigpCiAgICB7CiAgICAgIEZ1bmM8aW50LGludD4gZiA9ICh4KSA9PiAoeCAqIDIpOwogICAgICBGdW5jPGludCxpbnQ+IGcgPSAoeSkgPT4gKHkgKyAxMCk7CiAgICAgIEZ1bmM8aW50LGludD4gaCA9IGYudGhlbihnKTsKICAgICAgU3lzdGVtLkNvbnNvbGUuV3JpdGVMaW5lKGgoMTApKTsKICAgIH0KfQ==