use letrec