A benchmarking attempt to compare CPP macros to template haskell functions.
A very simple macro- add file and line number information to an error function.

    cpp: FATAL ERROR: Oh no!AT: cpp.hs:7

    hs: main:Main hs.hs:7:5 Oh no!

# Running

## running the CPP file

    rm -f cpp cpp.o cpp.hi && time ghc --make -O2 cpp.hs

## running the hs file

    rm -f hs hs.o hs.hi && time ghc --make -O2 hs.hs

# Comparison

These are difficutl to compare directly to eachother. Template haskell requires dependencies that take time to link- dependencies you probably already have in your application. So instead we compare the times of calling one macro/TH function versus calling 26.

This benching was good enough for me that I didn't feel the need to actually use Criterion.

Data:

    CPP 1    CPP 30    HS 1     HS 30
    -------  -------  -------  -------
    .35-.37  .43-.46  .57-.59  .61-.64

Results

CPP line macros appear to take more time to compile than Error-Location TH functions.
It is still possible that there is more per-file invocation overead for TH than CPP (that this benchmark ignrores), even if you are already using TH in your application.
