adapted according to the type of bindings in let expression