A function has dependent type if the type of a function's result depends on the
VALUE of its argument; this is not the same thing as a ParameterizedType.
The second order lambda calculus possesses functions with dependent types.
Languages with dependent types:
"Static dependent types are the basis of a new type system that permits types and values to be packaged together into first class modules. Unlike other approaches to modules, static dependent types permit unrestricted access to the types and values in first class modules without sacrificing static type checking or data abstraction..."