Mikera <mike.r.anderson...@gmail.com> writes:

> On Wednesday, 11 December 2013 13:37:24 UTC, Philipp Meier wrote:
>> Implementing a clojure protocol will give you fast dispatch on the first 
>> argument's type. 
>>
>
> Very true... it's a tradeoff:
> - protocols allow open extension (which doesn't appear to be needed here?)
> - instance? checks are even faster (although protocol dispatch is still 
> pretty fast)
> - protocols have some other quirks (e.g. not allowing primitive arguments)
>
> In the case we have here (a small fixed number of types, no open dispatch 
> required) I think I would prefer instance? checks (especially given a nice 
> macro to remove the boilerplate). 


Yeah, unfortunately I do need dispatch on primitive arguments, so
protocols fail for me.

I've been trying to get this to work as a macro, but am having problems
with this. The instance? check is easy to do, but adding the type hint
is much harder; I think that the ^macro expands at read time, so before
the macro expands, so it's not possible to construct the type hint.

I've tried to rewrite this with `with-meta' but can't get this to work
either since I think the meta is being added to the value.

My hope was to get something like this...

(defn ^IRI iri 
  [name]
  (with-type-hint
     [name [String java.net.URL java.io.File]]
     (IRI/create name)))

Am I really the first person to get this problem?

Phil

-- 
-- 
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
--- 
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 clojure+unsubscr...@googlegroups.com.
For more options, visit https://groups.google.com/groups/opt_out.

Reply via email to