I feel similarly to Gene Kim about Racket. Here's a comparison ... Gene Kim's Clojure example: ; input is JSON string: "{foo: 2}" (defn xform [s] (-> (js/JSON.parse s) js->clj (update "foo" + 2) clj->js js/JSON.stringify)) Racket equivalent: #lang racket (require threading json) ; input is (xform "{\"foo\" : 2 }") (define (xform s) (~> s string->jsexpr (hash-update 'foo (λ (x) (+ 2 x))) jsexpr->string))
This is a strange comparison. ClojureScript looks bad here because it's using the native platform interop rather than a wrapped library, but the ability to easily drop down and interact with the host is one of the best parts of Clojure.
I do prefer the ClojureScript because I don't know how to type "λ" and that seems like a usability handicap. Minor complaint I know.