proper recursion on eval