www

Unnamed repository; edit this file 'description' to name the repository.
Log | Files | Refs | README

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