从Haskell中的外部文件处理标准Quasikote
我想为编译时AST操作读取一个外部Haskell源文件。我该怎么做?我尝试了以下类似的方法,但编译时没有出现错误消息“TH.hs:15:12: 不允许在声明括号内使用声明拼接”从Haskell中的外部文件处理标准Quasikote,haskell,template-meta-programming,template-haskell,Haskell,Template Meta Programming,Template Haskell,我想为编译时AST操作读取一个外部Haskell源文件。我该怎么做?我尝试了以下类似的方法,但编译时没有出现错误消息“TH.hs:15:12: 不允许在声明括号内使用声明拼接” -------- --TH.hs {-#语言模板Haskell,准语言模板} 模块TH,其中 导入语言.Haskell.TH 导入语言.Haskell.TH.Quote dd::准晶石 dd=准整数未定义未定义ddDec ddDec文件_name=do 档案室 进口 进口 dd:: dd= 谢谢你的回复。我在haskel
--------
--TH.hs
{-#语言模板Haskell,准语言模板}
模块TH,其中
导入语言.Haskell.TH
导入语言.Haskell.TH.Quote
dd::准晶石
dd=准整数未定义未定义ddDec
ddDec文件_name=do
档案室
进口
进口
dd::
dd=
谢谢你的回复。我在haskell src exts qq包中找到了该模块,但我得到了“尝试运行编译时代码时出现异常:未实现”的错误。我阅读了声明,实际上Quasikoter没有实现。也许我可以在源代码中编写一个与AntizoteExp类似的代码?(不过,我不知道怎么做。)
--------
-- 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."
--------
import Language.Haskell.Exts.QQ
import Language.Haskell.TH.Quote
dd :: QuasiQuoter
dd = quoteFile dec