私はHaskellモジュール内のすべてのTHスプライスを拡張する小さなユーティリティを作成しました。これにより、THが利用できない場合でもhaskellモジュールを使用できます。これを実現するために-ddump-splices
、モジュールのコンパイル中にオプションをGHCに渡し、結果のコードをキャプチャしてから、モジュール内のTH宣言をキャプチャされたコードに置き換えます。
ただし、-ddump-splicesが常にコンパイル可能なコードを生成するとは限らないようです。具体的には、レイアウトに中括弧を使用しているようですが、正しい場所にセミコロンを追加していません。
これが私のテストファイルの例です-
case dispatch_a3Tg pieces0_a3Tf of {
Just f_a3U6
-> f_a3U6
master0_a3T9
sub0_a3Ta
toMaster0_a3Tb
app4040_a3Tc
handler4050_a3Td
method0_a3Te
Nothing -> app4040_a3Tc }
ここでは、開閉ブレースが生成されましたが、2つのケースの選択肢の間に必要なセミコロンは生成されませんでした。これにより、コンパイル時に次のエラーが発生します-
GHCi, version 7.4.1: http://www.haskell.org/ghc/ :? for help
Loading package ghc-prim ... linking ... done.
Loading package integer-gmp ... linking ... done.
Loading package base ... linking ... done.
[1 of 1] Compiling Main ( Test.hs, interpreted )
Test.hs:51:17: parse error on input `->'
Failed, modules loaded: none.
Prelude>