4

私は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> 
4

1 に答える 1

3

いいえ、スプライスダンプは無効なコードであることが多く、コンパイルするだけでなく人間が理解できるものに減らすにはかなりの時間がかかります。これは、TYBの側面を調査する際のフラストレーションの原因でした。

于 2012-08-29T00:09:46.647 に答える