(* type inference *) fun zz x = x / 2 ; fun zz x y = x / y ; fun zz x = x div 2 ; fun zz x y = x div y ; (* bindings *) val x = 5; fun wow z = z + x; wow 9; val x = 10; wow 9; (* lazy vs. eager *) fun looper x = looper(x):int; fun heaper x = x*looper(x):int; fun doit (flag,arg,func) = if flag then func(arg):int else 1 ; doit(true,5,heaper); doit(false,5,heaper); fun do2 (flag,arg) = if flag then arg else 1; do2(true,heaper(5)); do2(false,heaper(5));