On Dec 27, 2012, at 8:58 PM, Harry Spier wrote:

> On Fri, Dec 14, 2012 at 10:44 AM, Matthias Felleisen
> <matth...@ccs.neu.edu> wrote:
>> 
>> It is critical to inform clients of the services that a module
>> provides. In the absence of types, contracts are the closest
>> information we have.
> AND
> On Fri, Dec 14, 2012 at 11:43 AM, Ray Racine <ray.rac...@gmail.com> wrote:
>> For the TR folks you can have your cake and eat it with a cup of coffee with
>> `provide'.  TR Rules
> 
> Given the above, should you be using Typed Racket instead of contracts
> whenever possible?  Are there cases where if you have the choice you
> should prefer contracts instead of using Typed Racket


No for several reasons: 

1. Our contracts are actually more powerful than our types: 

 see 
http://www.ccs.neu.edu/home/matthias/Style/style/Units_of_Code.html#(part._.Contracts)

especially contract for celsius->fahrenheit for an example. 
(In principle, our type system can express this idea.) 

2. We see Racket as a continuum: 
 -- write a script, throw it away 
 -- or grow the script/create prototype with informal contracts and data 
descriptions
 -- if you like your prototype and you know it'll be around for a while, 
        turn informal contracts into checked contracts
        weighing performance impact against importance of checks. 
 -- if you ever maintain any of these modules, split contracts into types and 
residual contracts. 
        Problem: we still don't have contract-out for TR        
        So you will need to turn contracts into types and throw away residual 
contracts. 

One day SAM will get around to this gap. 

3. Of course, you should know which entry point is best for you 
and choose for yourself at which level you wish to enter. The 
point is

  with Racket, you have this choice

(and with other languages, you don't.) -- Matthias


_________________________
  Racket Developers list:
  http://lists.racket-lang.org/dev

Reply via email to