This offers updated macros to assist with delegating into/through fields of
a defined type.
Two macros apply a function to field value(s) yielding the functional
result;
and two others do that and then rewrap the result in the source type.
The exports are:
@delegate_oneField,
@delegate_oneField_fromTwoVars,
@delegate_oneField_asType,
@delegate_oneField_fromTwoVars_asType
They work so:
import Base:string, show, (<), (<=), abs, (-), (+), (*)
immutable MyInt16
value::Int16
end
three = MyInt16(3)
seven = MyInt16(7)
@delegate_oneField( MyInt16, value, [string, show])
string(three) == "3" # true
show(seven) # 7
@delegate_oneField_fromTwoVars( MyInt16, value, [ (<), (<=) ] )
three < seven # true
seven <= seven # true
@delegate_oneField_asType( MyInt16, value, [abs, (-)])
abs(three) == three # true
-seven == MyInt16(-7) # true
@delegate_oneField_fromTwoVars_asType( MyInt16, value, [ (+), (*) ] )
three + seven == MyInt16(3+7) # true
three * seven == MyInt16(3*7) # true