aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorChouser <chouser@n01se.net>2009-01-09 20:57:46 +0000
committerChouser <chouser@n01se.net>2009-01-09 20:57:46 +0000
commit0fe49d170b0024a0e19312a741eb45e684251e75 (patch)
treeb6186d0a10aa659731a467df675b3a0440f05d68
parent6110a9850fc33c4d6a96029f1b2a05c20f119d11 (diff)
Add defhinted to clojure.contrib.def
-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)))