aha.

ok, so i was substituting "$" rather than ":$" for the function, which i 
guess means it's resolved to be $(::Any, ::Any) before substitution.  if i 
use the symbol :$ then things work correctly.

so this works fine:

immutable Fast{U<:Unsigned}
    i::U
end
+{U<:Unsigned}(a::Fast{U}, b::Fast{U}) = Fast{U}(a.i $ b.i)

immutable Slow{I<:Unsigned}
    i::I
end
for (name, op) in ((:+, :$),)
    @eval $name{U<:Unsigned}(a::Slow{U}, b::Slow{U}) = Slow{U}(($op)(a.i, b.
i))
end



Reply via email to