Everything I&#39;ve read has said that it&#39;s generally considered good practice to specify the full type of a function before the definition.  Why is this?  It almost seems to go against the principles of type inference.  Why let the compiler infer types if you&#39;re just going to tell it what types to use for everything?  Ok well, not really for everything, you don&#39;t typically specify types for local bindings, but still why the inconsistency?  I have a little experience with ML and F# and there you&#39;re encouraged to -not- specify types explicitly, and let the compiler infer them for you.  In fact, it seems like it would be fairly common where you specify a type that is -less- general than the type that the compiler would infer for you, because the most general type might involve a combination of type classes used in various ways, and it may not always be obvious to the programmer how to specify it correctly.<br>