recursive binding implemented as a letrec internally