This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-03-06
Channels
- # announcements (4)
- # asami (11)
- # babashka (1)
- # beginners (70)
- # bitcoin (2)
- # calva (68)
- # cider (311)
- # clara (1)
- # clj-kondo (58)
- # cljsrn (18)
- # clojure (37)
- # clojure-australia (1)
- # clojure-europe (22)
- # clojure-poland (6)
- # clojure-serbia (2)
- # clojure-spec (9)
- # clojurescript (11)
- # conjure (4)
- # cursive (16)
- # data-oriented-programming (21)
- # datahike (1)
- # emacs (10)
- # events (1)
- # fulcro (9)
- # girouette (2)
- # graalvm (52)
- # graphql (2)
- # jobs-discuss (5)
- # lsp (8)
- # malli (8)
- # off-topic (17)
- # other-languages (46)
- # pathom (17)
- # portal (2)
- # shadow-cljs (11)
- # slack-help (2)
- # sql (47)
- # tools-deps (14)
- # tree-sitter (1)
- # xtdb (6)
pulling out malli schemas for defn
s (Vars):
(-var-schema #'+)
;[:function
; [:=> :catn :any]
; [:=> [:catn [x :any]] :any]
; [:=> [:catn [x :any] [y :any]] :any]
; [:=> [:catn [x :any] [y :any] [more [:+ :any]]] :any]]
(-var-schema #'println)
; [:=> [:catn [more [:* :any]]] :any]
yes, vectors are optional if there are no childs or props, e.g. [:int]
can be written as :int
.
the imp btw:
(defn -var-schema [var]
(let [-=> (fn [as] (let [[f s [t]] (partition-by #{'&} as)
[fas ras rop] (cond t [f t :+], s [nil (first s) :*], :else [f])]
[:=> (if (or (seq fas) ras)
(vec (concat [:catn] (mapv (fn [a] [a :any]) fas) (when ras [[ras [rop :any]]])))
:catn) :any]))
{:keys [arglists]} (meta var)
-=>s (mapv -=> arglists)]
(if (second arglists) (into [:function] -=>s) (first -=>s))))
👍 3