ast: let rec