> I've not used NumericFuctors so I can't comment on your main question. If > it's of any use, there's an entirely different approach (more of a dirty > trick, really) to inlining functions passed in as arguments. Here's a gist > that shows the trick: > https://gist.github.com/timholy/bdcee95f9b7725214d8b
Thanks Tim, it is useful! by making more explicit the relevance of the constructor trick: type sinc_plus_x end sinc_plus_x(x) = sin(x)/x + x function sumf{F}(::Type{F}, x::AbstractArray) s = 0.0 for xs in x s += F(xs) end s end The above sumf is conceptually exactly the same as the one in your gist (and so achieves the same performance), only it delegates the meta-programming stuff to the compiler :-) Unfortunately, I failed to find a more general efficient solution, in the vein of sum(imap(sinc_plus_x, x)) where imap is an iterator similar to the one in package Iterators.jl (or python's imap): memory allocations are triggered, for no obvious (to me) reasons (my guess would be tuples allocations in the next() implementation).