Add variant definition
Use let rec and