Represent the operations as macros

The function evaluation has to be lazy otherwise it doesn't work.