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
