Haskell can do almost everything people generally use macros for without them. But there's always some things only macros can do, so for that you have template haskell.
It's for both, but utility functions also serve the same purpose (which is why you see people claiming they could do whatever Lisp macros do with function/methods/classes/monads/templates/makefiles, etc.) :-P