4

我想读取一个外部 Haskell 源文件以进行编译时 AST 操作。我怎样才能做到这一点?我尝试了类似以下的方法,但编译时出现错误消息“TH.hs:15:12:声明括号内不允许声明拼接”。

--------
-- 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
导入Language.Haskell.Exts.QQ
导入Language.Haskell.TH.Quote

dd :: QuasiQuoter 
dd = quoteFile  dec
于 2012-08-25T05:29:29.213 回答