tailrec generator