metosin/malli

mx/defn and malli.destructure/parse unexpected handling of seqexps

Open

#1005 aperta il 1 feb 2024

Vedi su GitHub
 (4 commenti) (0 reazioni) (0 assegnatari)Clojure (237 fork)batch import
documentationhelp wanted

Metriche repository

Star
 (1724 star)
Metriche merge PR
 (Nessuna PR mergiata in 30 g)

Descrizione

If I write

(require '[malli.experimental :as mx])
(require '[malli.core :as m])

(mx/defn ^:malli/always f [xs :- [:* :int]]
  (malli.core/validate [:* :int] xs))

(f 1)
;; => false

(f [1])
;; => Execution error (ExceptionInfo) at malli.core/-exception (core.cljc:136).
;;    :malli.core/invalid-input

(m/validate [:* :int] [1])
;; => true

I would expect (f 1) to throw an except and (f [1]) to return true.

I think this is because the schemas for the arguments are combined using [:cat ...] and [:cat [:* :int]] 'flattens' the expression, so [[1]] is not valid for [:cat [:* :int]]. In this simple case the args schema should be something like [:tuple [:* :int]] for which [[1]] is valid.

Of course this is not so simple for varargs.

Guida contributor