added support for letrec