According to the API documentation [1], (quote x) should be equivalent to (Value x), but the the implementations are quite different:
(defn parse-quote [[_ syn]]
(cond
((some-fn number? keyword? symbol?) syn) {:op :singleton :val syn}
(vector? syn) (parse-quoted-hvec syn)
; quoted map is a partial map with mandatory keys
(map? syn) (syn-to-hmap syn nil nil false)
:else (err/int-error (str "Invalid use of quote:" (pr-str syn)))))
(defn parse-Value [[f & args :as syn]]
(when-not (#{1} (count args))
(err/int-error (str "Wrong arguments to Value: " syn)))
{:op :singleton
:val (first args)})
This means that e.g. '"Foo" results in an error, whereas (Value "Foo") is accepted.
I'd expect parse-quote to handle vectors and maps specially and handle the :else case exactly like Value. Should I create a ticket for this?
[1]
http://clojure.github.io/core.typed/#clojure.core.typed/Val--
Timo