I'm interested in exploring the use of the types provided by core.typed to 
guide function behavior at runtime. Specifically, I'd like to wrap existing 
functions such that the resulting functions behave in different ways 
depending on the type signatures of each original function.

I'm imagining a setup where I have macros that get type information from 
core.typed at the time of macro-expansion, and either:

* decide entirely at macro-expansion time how a function should be wrapped 
based on its type, or
* somehow make the type information available at runtime, leaving the 
analysis of the types to runtime functions.

As an example of the kind of decision I'd like to make based on types, I 
might look at `clojure.core/map` and say "I'll wrap `map` such that its 
first argument will be transformed in some particular way because the 
argument is a function, and the rest of the arguments will be transformed 
in some other way because they are collections." The reason I want to have 
type information for this is that I want the transformations to be 
dependent on the actual semantics of the original function, which is hinted 
at by the types. For example I can take the fact that an argument's type is 
some sort of collection and infer that the function is probably processing 
its contents; in that case I would want to transform the argument in a 
different way than if its type were `Any`, in which case I could conclude 
that even if the argument ends up being a collection at runtime, the 
original function must not be relying on that fact.

Does anyone see any obvious pitfalls with this kind of thing? Any tips from 
the crowd? I'm not sure exactly the best way of actually "analyzing" the 
type signatures, but I'm hoping that I might find some tools for that in 
core.typed.

Thanks for any help you can give!

Cheers,
James

-- 
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/d/optout.

Reply via email to