`tailrec` prosi kompilator o zamianę rekurencji ogonowej na pętlę (bez rosnącego stosu wywołań). Działa tylko dla bezpośredniej rekurencji, gdzie wywołanie rekurencyjne jest ostatnią operacją (tail position). Jeśli funkcja nie jest naprawdę ogonowa, kompilator nie zastosuje optymalizacji.