aboutsummaryrefslogtreecommitdiff
path: root/src/clojure/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'src/clojure/contrib')
-rw-r--r--src/clojure/contrib/def.clj11
1 files changed, 11 insertions, 0 deletions
diff --git a/src/clojure/contrib/def.clj b/src/clojure/contrib/def.clj
index bc0d6db9..c36b599d 100644
--- a/src/clojure/contrib/def.clj
+++ b/src/clojure/contrib/def.clj
@@ -71,3 +71,14 @@
`(let [v# (def ~name (. (var ~orig) (get)))]
(. v# (setMeta (merge (meta (var ~orig)) (assoc (meta (var ~name)) :doc ~doc))))
v#)))
+
+; defhinted by Chouser:
+(defmacro defhinted
+ "Defines a var with a type hint matching the class of the given
+ init. Be careful about using any form of 'def' or 'binding' to a
+ value of a different type. See http://paste.lisp.org/display/73344"
+ [sym init]
+ `(do
+ (def ~sym ~init)
+ (alter-meta! (var ~sym) assoc :tag (class ~sym))
+ (var ~sym)))