|
|
|
@ -14,20 +14,12 @@
|
|
|
|
|
#,@wire-datums)))
|
|
|
|
|
|
|
|
|
|
(define-macro-cases wire
|
|
|
|
|
[(wire ARG -> WIRE) #'(define/display (WIRE)
|
|
|
|
|
(val ARG))]
|
|
|
|
|
[(wire OP ARG -> WIRE) #'(define/display (WIRE)
|
|
|
|
|
(OP (val ARG)))]
|
|
|
|
|
[(wire ARG1 OP ARG2 -> WIRE) #'(define/display (WIRE)
|
|
|
|
|
(OP (val ARG1) (val ARG2)))]
|
|
|
|
|
[else #'(void)])
|
|
|
|
|
(provide wire)
|
|
|
|
|
|
|
|
|
|
(define-macro (define/display (WIRE) BODY)
|
|
|
|
|
[(wire ARG -> WIRE)
|
|
|
|
|
#'(begin
|
|
|
|
|
(define WIRE (delay BODY))
|
|
|
|
|
(define WIRE (delay ARG))
|
|
|
|
|
(module+ main
|
|
|
|
|
(displayln 'promises)
|
|
|
|
|
(displayln (format "~a: ~a" 'WIRE (val WIRE))))))
|
|
|
|
|
|
|
|
|
|
(define (val num-or-wire) (force num-or-wire))
|
|
|
|
|
(displayln (format "promise ~a: ~a" 'WIRE (force WIRE)))))]
|
|
|
|
|
[(wire OP ARG -> WIRE) #'(wire (OP (force ARG)) -> WIRE)]
|
|
|
|
|
[(wire ARG1 OP ARG2 -> WIRE) #'(wire (OP (force ARG1) (force ARG2)) -> WIRE)]
|
|
|
|
|
[else #'(void)])
|
|
|
|
|
(provide wire)
|
|
|
|
|