コンパイル時の AST 操作のために、外部の Haskell ソース ファイルを読みたかったのです。どうやってやるの?以下のようなことを試してみましたが、「TH.hs:15:12: Declaration splices are not allowed within宣言ブラケット」というエラーメッセージが表示されてコンパイルできませんでした。
--------
-- TH.hs
{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}
module TH where
import Language.Haskell.TH
import Language.Haskell.TH.Quote
dd :: QuasiQuoter
dd = QuasiQuoter undefined undefined undefined ddDec
ddDec file_name = do
file_cts <- runIO (readFile file_name)
-- runQ [d| dummy = 0 |] -- This can compile.
runQ [d| file_cts |] -- This does not compile.
--------
-- main.hs
{-# LANGUAGE TemplateHaskell, QuasiQuotes #-}
import Language.Haskell.TH
import Language.Haskell.TH.Quote
import TH
[dd|input.hs|]
--------
-- input.hs
test = putStrLn "Hello."
--------
haskell-src-exts パッケージも試してみましたが、このパッケージは解析のみのようで、識別子と型チェックを解決しません。だから私はTHがより良い選択だと思った。