我希望MyDependency.txt在更改该文件时重新计算使用 IO 并依赖于文件的 TemplateHaskell 表达式。
因此,我addDependentFile "MyDependency.txt"用来告诉 ghc 在编译我的代码时检查该文件是否有修改。
不幸的是,这不起作用,因为addDependentFile仅相对于调用 ghc 的目录起作用。
我如何使用它来依赖于我正在编译的文件旁边(在同一目录中)的文件?
我希望MyDependency.txt在更改该文件时重新计算使用 IO 并依赖于文件的 TemplateHaskell 表达式。
因此,我addDependentFile "MyDependency.txt"用来告诉 ghc 在编译我的代码时检查该文件是否有修改。
不幸的是,这不起作用,因为addDependentFile仅相对于调用 ghc 的目录起作用。
我如何使用它来依赖于我正在编译的文件旁边(在同一目录中)的文件?
您可以使用locationfromLanguage.Haskell.TH.Syntax提取正在编译的文件的文件名,并使用它来组装正确的路径:
-- | Uses 'addDependentFile' on a file relative to the current file
-- to mark it as being checked for changes when compiled with TemplateHaskell.
--
-- Returns an empty list of declarations so that it can be used with:
--
-- >$(addDependentFileRelative "MyDependency.txt")
addDependentFileRelative :: FilePath -> Q [Dec]
addDependentFileRelative relativeFile = do
currentFilename <- loc_filename <$> location
pwd <- runIO getCurrentDirectory
let invocationRelativePath = takeDirectory (pwd </> currentFilename) </> relativeFile
addDependentFile invocationRelativePath
return []
(公共领域代码)