implement let and let* properly