Here are some just some links about 
type inference in F# and Scala.
1st. from 
F# manual:
F# is statically typed, but frequently code will not contain many    type annotations.  This is because F# uses type inference to automatically determine    the types of expressions.  Type inference checks that types   "match up" in obvious ways, i.e., that a function definition is consistent and that the definition of a       function is sufficiently general to match all the ways in which it is used.    Type inference is a global process over an entire source file, or, in the case of    entries to F# Interactive, over the scope of a single entry delimited by ';;'    terminators.
     Type inference automatically generalizes code to be as generic as possible.    To see the types inferred for the top-level definitions in your program     use the -i compiler switch, or hover your mouse over definitions in a supported interactive    environment such as Visual Studio.
        Calls and accesses to .NET and F# methods and properties (collectively known as members)   involve a form of type-directed    overload resolution, resolved based on    left-to-right, outside-to-in analysis of a file, i.e., type information subsequent to    the use of an overloaded member is not taken into account for its resolution.
       In addition, some operators such as +  are overloaded.  Operator overloading    is resolved over the same scope as type inference, typically an entire file.  Where operator overloading    is not resolved the overloading typically defaults to work over 32-bit integers.
             Code that uses .NET library calls (and in particular libraries which make    heavy use of the dot-notation) will need to be annotated with extra type annotations in order    to assist the type inference process.  The F# type checker will indicate when further    type annotations are needed.
(for F# I can also recommend the 
F# books)
2nd Scala: besides the type-inference, has a very nice generic system, with focus on components & scalability, see  'Generics of a  Higher Kind', the google-talk (slides here), and the other scala-docs (for the studious).   (you can feel a flavor of Haskell in scala (traits, implicits) , bringing the high-order-function elegance)