(module clojurian-syntax (doto -> ->* ->> ->>*) (import chicken scheme) (define-syntax doto (syntax-rules () ((_ x) x) ((_ x (fn args ...) ...) (let ((y x)) (fn y args ...) ... y)))) (define-syntax -> (syntax-rules () ((_ x) x) ((_ x (y z ...) rest ...) (-> (y x z ...) rest ...)))) (define-syntax ->> (syntax-rules () ((_ x) x) ((_ x (y ...) rest ...) (->> (y ... x) rest ...)))) (define-syntax ->* (syntax-rules () ((_ x) x) ((_ x (y z ...) rest ...) (->* (receive args x (apply y (append args (list z ...)))) rest ...)))) (define-syntax ->>* (syntax-rules () ((_ x) x) ((_ x (y z ...) rest ...) (->>* (receive args x (apply y (append (list z ...) args))) rest ...)))) )