Hi all, I&#39;m trying to implement some simple macros to use monads in racket using a Haskell-like do notation. I have the following macros, and my problem is that I want the do macro to capture the bind identifier created by with-monad, and in each recursive step of the do macro expansion keep the same identifier. I don&#39;t know it is possible, I tried using (with-syntax ((bind (datum-&gt;syntax &#39;bind) ))) but it doesn&#39;t work.<br>
<br>Thanks<br><br>(module monad racket  <br>  (provide with-monad do)<br>  <br>  (define-syntax-rule (with-monad (&lt;unit-f&gt; &lt;bind-f&gt;) &lt;body&gt;)<br>    (let ((unit &lt;unit-f&gt;)<br>          (bind &lt;bind-f&gt;))<br>
      &lt;body&gt;))<br><br>  (define-syntax (do stx)<br>    (syntax-case stx (let let* letrec letrec* &lt;-)<br>      ((do s) #&#39;s)<br>      ((do (x &lt;- s) ss ...) #&#39;(bind (lambda (x) (do ss ...)) s))<br>      ((do (let bs) ss ...) #&#39;(let bs (do ss ...)))<br>
      ((do (let* bs) ss ...) #&#39;(let* bs (do ss ...)))<br>      ((do (letrec bs) ss ...) #&#39;(letrec bs (do ss ...)))<br>      ((do (letrec* bs) ss ...) #&#39;(letrec* bs (do ss ...)))<br>      ((do s ss ...) #&#39;(bind s (lambda (_) (do ss ...))))))<br>
  )<br clear="all"><br>-- <br>Ismael<br><br>