compileRecLet :: [(Var,Expr Var)] -> Expr Var -> Compile Expression
compileRecLet binds body = do
  b <- compileExp body
  decls <- mapM compileVarDecl binds
  let closure = Procedure [] (decls ++ [Return b])
  return (Apply closure [])
compileRecLet :: [(Var,Expr Var)] -> Expr Var -> Compile Expression
compileRecLet binds body = do
  b <- compileExp body
  decls <- mapM compileVarDecl binds
  let closure = Procedure [] (decls ++ [Return b])
  return (Apply closure [])
compileRecLet binds body = do
  b <- compileExp body
  decls <- mapM compileVarDecl binds
  let closure = Procedure [] (decls ++ [Return b])
  return (Apply closure [])