[plt-scheme] macro question
TS and contracts aren't integrated yet. See earlier reply -- Matthias
On Jun 11, 2008, at 4:33 AM, Mark Engelberg wrote:
> If you want to use contracts in Typed Scheme, do you have to restate
> all the aspects of the contract that are already checked by the type
> system, or can you just focus on the properties that are not enforced
> by the type system (e.g. input must be a *positive* integer)?
>
> --Mark
>
> On Tue, Jun 10, 2008 at 2:41 PM, Matthias Felleisen
> <matthias at ccs.neu.edu> wrote:
>
>> Before we talk too abstractly here, let's look at an example:
>>
>> UNTYPED
>>
>>> #lang scheme
>>>
>>> ;; An A is one of:
>>> ;; -- Number
>>> ;; -- Boolean
>>> ;; -- (cons A A)
>>>
>>> ;; A -> Number
>>> ;; compute the sum of all numbers in the tree
>>> (define (Sigma tree)
>>> (cond
>>> [(number? tree) tree]
>>> [(boolean? tree) 0]
>>> [else (+ (Sigma (car tree)) (Sigma (cdr tree)))]))
>>>
>>> (= (Sigma (cons (cons #t 5) 0)) 5)
>>
>> TYPED:
>>
>>> #lang typed-scheme
>>>
>>> (define-type-alias A (mu A (U Number Boolean (cons A A))))
>>>
>>> (: Sigma (A -> Number))
>>> ;; compute the sum of all numbers in the tree
>>> (define (Sigma tree)
>>> (cond
>>> [(number? tree) tree]
>>> [(boolean? tree) 0]
>>> [else (+ (Sigma (car tree)) (Sigma (cdr tree)))]))
>>>
>>> (= (Sigma (cons (cons #t 5) 0)) 5)
>>>
>>
>>
>> In general, Typed Scheme is as compact as untyped Scheme in HtDP
>> style. And
>> it is checked for you. -- Matthias
>>