dg is a delegate and must return a value of the same type as it self. What
should "some_type" be to make this work?
some_type delegate() dg;
/*********/
while( (dg = dg()) !is null){}
(in case you are wondering this would act as a finite state machine)