Patched in master branch. Clojure 1.5.0-master-SNAPSHOT user=> user=> (defn bar [^Double d] d) #'user/bar user=> (defn baz [^System.Double d] d) #'user/baz user=> (bar 1.2) 1.2 user=> (baz 1.2) 1.2 user=> (defprotocol FP (foo [_])) FP user=> (extend-protocol FP System.Double (foo [d] d)) nil user=> (foo 1.2) 1.2
You can now type hint with double, Double and System.Double. One should keep in mind that this is the CLR, not C# (or the JVM). Thus, int, Int32, System.Int32 and float, Single, System.Single. Note that a type hint such as ^System.Int32 x is actually using the symbol System.Int32 as the value for :tag -- that is how the LispReader works. However, if you were to put :tag metadata on programmatically and actually use the type System.Int32 -- well, that should work also. -David > On Thursday, November 29, 2012 11:02:19 AM UTC-6, ffailla wrote: >> >> I have discovered some odd behavior when type-hinting fns with >> ^System.Double: >> >> user=> (defn bar [^System.Double d] d) >> #'user/bar >> user=> (bar 1.2) >> 2.35293190771409E-316 >> user=> (bar 1) >> 2.35069794048985E-316 >> >> The same behavior occurs when extending double via extend-protocol or >> extend-type: >> >> user=> (defprotocol FooProto (foo [_])) >> user=> (extend-protocol FooProto System.Double (foo [d] d)) >> nil >> user=> (foo 1.2) >> 2.25126584588049E-316 >> >> Any ideas? Thanks. >> >> -Frank Failla >> >> -- You received this message because you are subscribed to the Google Groups "Clojure" group. To post to this group, send email to clojure@googlegroups.com Note that posts from new members are moderated - please be patient with your first post. To unsubscribe from this group, send email to clojure+unsubscr...@googlegroups.com For more options, visit this group at http://groups.google.com/group/clojure?hl=en