letrec in progress