Are module attributes "read" multiple times in same function?

you can achieve this by evaluating the call at compile time, by doing:

unquote(@money.amount)

you can do it by calling unquoteonly since you are inside a macro (for)