using System; public class Pair<T1, T2> { } public delegate Pair<T1, T2> Group<T1, T2>(T1 input); public static class C { public static void Foo<TInput, TValue, TIntermediate> (Group<TInput, TValue> Pair, Func<TValue, Group<TInput, TIntermediate>> selector) { } } public class E<TI> { public void Rep1<TV>(Group<TI, TV> parser) { C.Foo (parser, (x) => parser); } } public class M { public static void Main () { } }