diff options
author | Chouser <chouser@n01se.net> | 2009-01-09 20:57:46 +0000 |
---|---|---|
committer | Chouser <chouser@n01se.net> | 2009-01-09 20:57:46 +0000 |
commit | 0fe49d170b0024a0e19312a741eb45e684251e75 (patch) | |
tree | b6186d0a10aa659731a467df675b3a0440f05d68 /src/clojure/contrib/def.clj | |
parent | 6110a9850fc33c4d6a96029f1b2a05c20f119d11 (diff) |
Add defhinted to clojure.contrib.def
Diffstat (limited to 'src/clojure/contrib/def.clj')
-rw-r--r-- | src/clojure/contrib/def.clj | 11 |
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))) |