It's quite hacky, but this can be done with CPP and quasiquoting (incidentally, it would be _REALLY_ nice if 'undefined' and 'error' had similar source-location-dependent error messages by default):
https://github.com/mokus0/junkbox/commit/bad59f486c3457f1d880a1cfa5b1baa33aff4ade
#define undefined [underscore|"undefined" at line __LINE__ in __FILE__|]
That's nice, I like it. Wanted something like this for a while. I rarely get exceptions in Haskell so that it's not even a bother when I don't know what line number an exception came from, even undefined, but it's nice to have it.