The expression
(clojure.core.incubator/-?> 1 identity identity)
fails with
Unable to resolve symbol: -?> in this context
unless -?> is referred into the local namespace. Why it fails is clear:
(macroexpand-1 `(clojure.core.incubator/-?> 1 identity identity))
outputs
(-?> (-?> 1 clojure.core/identity) clojure.core/identity)
It expands to unqualified symbols. This is because the *defnilsafe* macro
uses
~'~nil-safe-name
in its expansion so no syntax-quoting occurs. A solution would be to define
it as
(defmacro defnilsafe [docstring non-safe-name nil-safe-name
simple-nil-safe-name]
`(defmacro ~simple-nil-safe-name ~docstring
{:arglists '([~'x ~'form] [~'x ~'form ~'& ~'forms])}
([x# form#]
`(let [~'i# ~x#] (when-not (nil? ~'i#) (~~non-safe-name ~'i# ~form#))))
([x# form# & more#]
`(~~nil-safe-name (~~nil-safe-name ~x# ~form#) ~@more#))))
and invoke with
(defnilsafe "...doc..." `-> `-?> -?>)
I didn't find a more direct way to move between qualified and unqualified
symbols.
In normal use this weakness is not a major problem, but it becomes one when
trying to use the nilsafe operators in macros, in eval'd forms, etc.
--
--
You received this message because you are subscribed to the Google
Groups "Clojure" group.
To post to this group, send email to [email protected]
Note that posts from new members are moderated - please be patient with your
first post.
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/clojure?hl=en
---
You received this message because you are subscribed to the Google Groups
"Clojure" group.
To unsubscribe from this group and stop receiving emails from it, send an email
to [email protected].
For more options, visit https://groups.google.com/groups/opt_out.