SafeHaskellのドキュメントには次のように記載されています。
[...]残念ながら、Template Haskellはモジュールの境界を覆すために使用できるため、このコンストラクターにアクセスするために使用できます。[...] Dangerモジュールをコンパイルするために-XSafeフラグを使用すると、安全なサブセットに使用できるHaskellの機能が制限されます。これには、unsafePerfromIO、Template Haskell、[...]の禁止が含まれます。
ASTを別のASTに変換するマクロシステムとして使用されますが、THをHaskellの安全なサブセットに単純に制限し、結果のASTをこのサブセットに制限することはできませんか?