max functions always bind a newly generated local variable, to fix case where (fn) is not bound to any variable