Skip to content

Instantly share code, notes, and snippets.

@mfikes
Last active February 24, 2018 03:16
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mfikes/3ed89b767048e109891464f1f7e7151b to your computer and use it in GitHub Desktop.
Save mfikes/3ed89b767048e109891464f1f7e7151b to your computer and use it in GitHub Desktop.
clojure / cljs spec macro
(ns foo.core)
(defmacro my-def
[x]
`(clojure.spec.alpha/def ~x int?))
user=> (require '[clojure.spec.alpha :as s])
nil
user=> (require 'foo.core)
nil
user=> (foo.core/my-def ::a)
:user/a
user=> (s/valid? ::a 3)
true
user=> (macroexpand '(foo.core/my-def ::a))
(clojure.spec.alpha/def-impl (quote :user/a) (quote clojure.core/int?) clojure.core/int?)
user=> ::s/invalid
:clojure.spec.alpha/invalid
cljs.user=> (require '[clojure.spec.alpha :as s])
cljs.user=> (require-macros 'foo.core)
cljs.user=> (foo.core/my-def ::a)
:cljs.user/a
cljs.user=> (s/valid? ::a 3)
true
cljs.user=> (macroexpand '(foo.core/my-def ::a))
(cljs.spec.alpha/def-impl (quote :cljs.user/a) (quote cljs.core/int?) clojure.core/int?)
cljs.user=> ::s/invalid
:cljs.spec.alpha/invalid
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment