can it be final to allow tailrec?