p.s. Contracts are not types. 

Even if you use define/contract, you may violate the contract on recursive 
calls. This is intentional. 





On Nov 16, 2012, at 7:13 PM, Matthias Felleisen wrote:

> 
> First cut: Contracts check cross-module invariants. That's why they establish 
> boundaries:
> 
> http://doc.racket-lang.org/guide/contract-boundaries.html?q=contracts
> 
> When a module M provides a function f with a contract, calls w/i M to f are 
> not checked. 
> 
> Second cut: if you know about contract regions, you can break modules into 
> several contract regions and thus force contract checks within a module. 
> 
> 
> 
> On Nov 16, 2012, at 6:59 PM, Harry Spier wrote:
> 
>> Dear list members,
>> 
>> Can someone explain why in the following cases only two out of the three 
>> cases and not all of them cause a contract violation.
>> Thanks,
>> Harry Spier
>> 
>> #lang racket
>> (provide/contract (amount positive?))
>> (define amount -7)
>>> 
>> contract
>> promised: positive?
>> produced: -7
>> in: positive?
>> contract from: anonymous-module
>> blaming: anonymous-module
>> 
>> BUT--------------------------------------
>> 
>> #lang racket
>> (provide/contract [amount (-> positive?)])
>> (define (amount) -7)
>> (amount)
>>> 
>> No contract violation
>> 
>> AND-------------------------------------------
>> 
>> #lang racket
>> 
>> (provide/contract [amount (-> positive?)])
>> (define (amount) -7)
>> 
>> (module* main racket
>> (require (submod ".."))
>> (amount))
>> 
>>> 
>> amount: broke its contract
>> promised: positive?
>> produced: -7
>> in: the range of
>> (-> positive?)
>> contract from: 
>> c:\users\harry\ocr_project\contract-test.rkt
>> blaming: 
>> c:\users\harry\ocr_project\contract-test.rkt
>> at: c:\users\harry\ocr_project\contract-test.rkt:3.20
>> ____________________
>> Racket Users list:
>> http://lists.racket-lang.org/users
> 
> ____________________
>  Racket Users list:
>  http://lists.racket-lang.org/users

Attachment: smime.p7s
Description: S/MIME cryptographic signature

____________________
  Racket Users list:
  http://lists.racket-lang.org/users

Reply via email to