macrotypes/turnstile/examples/mlish-do.rkt
2016-06-28 13:35:51 -04:00

32 lines
560 B
Racket

#lang racket/base
(provide do)
(require (only-in "mlish.rkt" #%app λ Unit)
(for-syntax racket/base
syntax/parse))
(define-syntax do
(syntax-parser
#:datum-literals (<- :)
[(do bind:id body:expr)
#'body]
[(do bind:id
[x1:id <- m1:expr]
rst ...
body:expr)
#'(bind
m1
(λ (x1)
(do bind rst ... body)))]
[(do bind:id
[m1:expr]
rst ...
body:expr)
#'(bind
m1
(λ (dummy)
(do bind rst ... body)))]
))