As I'm trying to learn about TH I found out that it allows arbitrary IO actions during compilation (see What's so bad about Template Haskell?). This seems quite dangerous to me. Why is that? Is it really necessary for some tasks? Or is it just a simplification of its design, to "toss everything impure into the IO sin-bin"?
Update: I'd be also interested if there are any efforts at making a safe subset of TH that disallows arbitrary IO operations.