What is the difference between dependent typed languages and languages like Spec# and Eiffel that allow you to specify "contracts" for functions in your code for pre/postconditions? Is dependent typing basically the purely functional version of Eiffel's "contracts"?
From what I understand, dependently typed languages let you specify your function's pre and post conditions using predicate logic as part of the type.
Eiffel's concept of contracts seems to be similar, but based on imperative programming, not functional programming.