4

コンパイル時の 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がより良い選択だと思った。

4

1 に答える 1

4
import Language.Haskell.Exts.QQ 
import Language.Haskell.TH.Quote

dd :: QuasiQuoter 
dd = quoteFile  dec
于 2012-08-25T05:29:29.213 に答える