Support values as functions.
Try and split the provided macro into small chunks.