Okay, based on the comment, I suspect the answer's no - you'd need higher-order generic types. You'd want something like:
// Not real syntax!
interface IFunctor, TValue>
where TFunctor : IFunctor, TValue>
{
TFunctor Project(Func func);
}
The problem is trying to express the idea that the implementation of the interface must also be generic in a particular way, and allow that generic relationship to be used in the rest of the interface. That's not part of .NET generics, I'm afraid.
Joe Duffy has written about wishing for higher-order types before now - unfortunately I can't tell whether or not that article is relevant, as I can't get to it at the moment. (His blog server is somewhat temporamently, but the content is great :)
It's not entirely clear, but it's possible you're just talking about LINQ to Objects, basically. For example:
var kids = people.Where(x => x.Age < 18) // Filtering
.Select(x => x.Name) // Projection
.ToList();
You could write a more general purpose interface, e.g.
public interface IFunctor
{
IFunctor Foo(Func selector);
}
... but there's no such interface actually implemented by List
etc. LINQ to Objects works via extension methods instead.