This page is not created by, affiliated with, or supported by Slack Technologies, Inc.
2021-07-21
Channels
- # announcements (1)
- # babashka (13)
- # beginners (85)
- # calva (1)
- # chlorine-clover (16)
- # cider (30)
- # clj-kondo (2)
- # clj-on-windows (5)
- # cljdoc (3)
- # cljs-dev (12)
- # cljsrn (19)
- # clojure (88)
- # clojure-europe (39)
- # clojure-nl (7)
- # clojure-sweden (3)
- # clojure-uk (8)
- # clojurescript (35)
- # core-async (3)
- # data-science (2)
- # datomic (17)
- # defnpodcast (3)
- # deps-new (1)
- # editors (18)
- # emacs (4)
- # events (1)
- # expound (1)
- # figwheel-main (8)
- # fulcro (9)
- # graalvm (2)
- # graalvm-mobile (11)
- # helix (44)
- # jobs (7)
- # lsp (95)
- # luminus (9)
- # malli (6)
- # meander (4)
- # membrane (2)
- # missionary (13)
- # off-topic (98)
- # pathom (2)
- # polylith (4)
- # portal (3)
- # re-frame (6)
- # reagent (27)
- # reitit (3)
- # releases (3)
- # remote-jobs (6)
- # rewrite-clj (1)
- # rum (2)
- # sci (3)
- # shadow-cljs (7)
- # sql (66)
- # tools-deps (80)
- # vim (5)
- # xtdb (3)
Hello, i've stumble upon something weird this morning: (epsilon 626)
(defn bug [expr]
(m/match expr
(m/pred number?) {:num expr}
(?verb & ?args) {:verb ?verb :args (map bug ?args)}
_ {:any expr}))
(bug '(+ 1 (- 2 3)))
;; => {:any (+ 1 (- 2 3))}
any idea ?here the expansion of the match form:
(let*
[R__26068
(clojure.core/let
[T__26061 expr]
(clojure.core/letfn
[(state__26064 [] (if (number? T__26061) {:num expr} (state__26065)))
(state__26065 [] {:any expr})
(state__26066
[]
(if
(clojure.core/seq? T__26061)
(clojure.core/let
[T__26061_L__ (clojure.core/take 1 T__26061)]
(if
(clojure.core/= (clojure.core/bounded-count 2 T__26061_L__) 1)
(clojure.core/let
[T__26061_R__ (clojure.core/drop 1 T__26061)]
(clojure.core/let
[T__26061_L___nth_0__ (clojure.core/nth T__26061_L__ 0)]
(clojure.core/let
[?verb T__26061_L___nth_0__]
(clojure.core/let [?args T__26061_R__] {:verb ?verb, :args (map bug ?args)}))))
(state__26067)))
(state__26067)))
(state__26067 [] {:any expr})]
(state__26064)))]
(if
(meander.match.runtime.epsilon/fail? R__26068)
(throw (clojure.core/ex-info "non exhaustive pattern match" {}))
R__26068))
the :any branch appears two times in the letfn bindings.