This is indeed confusing:
class Blah<T> where T : Blah<T>
How do you actually satisfy that generic constraint? Should be illegal in my opinion.