On Apr 19, 2013, at 4:02 PM, Manfred Lotz wrote: > But it is more powerful.
[[ This is a quibble that could take you off your chosen path for years. The words 'more powerful' aren't that easy to agree with. Here are ways to make them incorrect: -- in a sound type system, the type signature f : int -> int means that when you launch your program, f will never, ever be applied to a bit string that represents a boolean. Our contract cannot guarantee this much. It will only guarantee that when f is applied to #true, an exn:fail:contract is signaled. -- our contract system has a really hard time expressions g : ∀ t : t -> t. In a sound type system, assigning this forall type to g means that for all possible types T in your module or types in modules linked to yours, possibly written in the distant future, the function assumes signature T -> T. If you equip g with an analogous contract in our world, the guarantee you get is that if g tries to misbehave -- by probing the given argument, it (g) will not behave as you expect. -- and lastly, you can easily imagine that proof systems can answer much more complex questions than Turing machines, and that you can design a type system that corresponds to such a proof system. Of course, you would then not necessarily use algorithms to check your type correctness. As I said, studying this question may take you off the beaten track, but I think people on this mailing list should be as informed as people on the Haskell or ML lists. ]] ____________________ Racket Users list: http://lists.racket-lang.org/users