Compare commits

..

No commits in common. "heterogeneous-let" and "master" have entirely different histories.

3 changed files with 21 additions and 55 deletions

View File

@ -4,7 +4,6 @@
trivial/format trivial/format
trivial/function trivial/function
trivial/math trivial/math
trivial/list
trivial/regexp trivial/regexp
trivial/vector) trivial/vector)
@ -52,15 +51,4 @@
(define/public (yolo) (define/public (yolo)
(new f%)))) (new f%))))
(check-false (not (new f%)))) (check-false (not (new f%))))
)
;; let*
(let*: ([v (list 1 2 3)]
[w v]
[k 42])
(ann (length: w) 3))
;; let with different kinds of bindings
(let: ([v (list 1 2 3)]
[k 42])
(ann (length: v) 3)))

View File

@ -1,9 +1,7 @@
#lang typed/racket/base #lang typed/racket/base
(provide (provide
define: define: let:
(rename-out [let:: let:])
let*:
(all-from-out trivial/private/set-bang) (all-from-out trivial/private/set-bang)
) )
@ -49,23 +47,3 @@
(lst-let stx) (lst-let stx)
(rx-let stx) (rx-let stx)
(vec-let stx))))) (vec-let stx)))))
(define-syntax (let*: stx)
(syntax-case stx ()
[(_ ([v b]) . body)
#'(let: ([v b])
. body)]
[(_ ([v b] [vv bb] ...) . body)
#'(let: ([v b])
(let*: ([vv bb] ...)
. body))]))
(define-syntax (let:: stx)
(syntax-case stx ()
[(_ ([v b]) . body)
#'(let: ([v b])
. body)]
[(_ ([v b] [vv bb] ...) . body)
#'(let: ([tmp b])
(let*: ([vv bb] ...)
(let: ([v tmp]) . body)))]))

View File

@ -1,4 +1,4 @@
#lang typed/racket/base #lang typed/racket/base
(provide (rename-out [define: define] [let: let] [let*: let*])) (provide (rename-out [define: define] [let: let]))
(require trivial/define) (require trivial/define)