-- Consider these defs in ML and Haskell. object T; object Object; function min(l:T*) = if l=nil then nil else min_jr(l[1], l[2..#l]); function min_jr(min_val:T, l:T*) = if l=nil then min_val else if l[1] < min_val then min_jr(l[1], l[2..#l]) else min_jr(min_val, l[2..#l]); -- Also, consider how type unsafe the preceding defs would be using Object -- instead of type vars. function min(l:Object*) = if l=nil then nil else min_jr(l[1], l[2..#l]); function min_jr(min_val:Object, l:Object*) = if l=nil then min_val else if l[1] < min_val then min_jr(l[1], l[2..#l]) else min_jr(min_val, l[2..#l]); value x = min(1, 2.5, "xyz"); -- This type checks, but clearly breaks at run- -- time, since 2.5 < "xyz" does not work