mlish-do.rkt (560B)
1 #lang racket/base 2 3 (provide do) 4 5 (require (only-in "mlish.rkt" #%app λ Unit) 6 (for-syntax racket/base 7 syntax/parse)) 8 9 (define-syntax do 10 (syntax-parser 11 #:datum-literals (<- :) 12 [(do bind:id body:expr) 13 #'body] 14 [(do bind:id 15 [x1:id <- m1:expr] 16 rst ... 17 body:expr) 18 #'(bind 19 m1 20 (λ (x1) 21 (do bind rst ... body)))] 22 [(do bind:id 23 [m1:expr] 24 rst ... 25 body:expr) 26 #'(bind 27 m1 28 (λ (dummy) 29 (do bind rst ... body)))] 30 )) 31