Reputation: 5087
I'm having a hard time figuring out how to use the local form in Typed Racket.
what is wrong with this:
(: make-random-emetype-list (Range -> (Listof EmeType)))
(define (make-random-emetype-list range )
(local ([define how-many-types (random-integer (Range-lower range) (Range-upper range))]
[define: (bld-lst lst remaining) : ((Listof EmeType) Integer -> (Listof EmeType))
(cond [(< remaining 1) lst]
[else (bld-lst (cons (new-emetype) lst) (- remaining 1))])])
(bld-lst '() how-many-types)))
I'm sure the problem is that I don't quite follow the syntactic specification in the ts-reference, but it would be very helpful to have an example or two of a locally defined function in typed racket.
Upvotes: 1
Views: 140
Reputation: 5087
The answer is, use letrec:. Well, now I know.
(: make-random-emetype-list (Range -> (Listof EmeType)))
(define (make-random-emetype-list range )
(letrec: ([lower : Integer (Range-lower range)]
[upper : Integer (Range-upper range)]
[how-many : Integer (random-integer lower upper)]
[bld-lst : (Integer (Listof EmeType) -> (Listof EmeType)) (lambda: ([remaining : Integer] [lst : (Listof EmeType)])
(cond [(< remaining 1 ) lst]
[else (bld-lst (- remaining 1) (cons (new-emetype) lst))]))])
(bld-lst how-many '())))
Upvotes: 1