我希望MyDependency.txt
在更改该文件时重新计算使用 IO 并依赖于文件的 TemplateHaskell 表达式。
因此,我addDependentFile "MyDependency.txt"
用来告诉 ghc 在编译我的代码时检查该文件是否有修改。
不幸的是,这不起作用,因为addDependentFile
仅相对于调用 ghc 的目录起作用。
我如何使用它来依赖于我正在编译的文件旁边(在同一目录中)的文件?
我希望MyDependency.txt
在更改该文件时重新计算使用 IO 并依赖于文件的 TemplateHaskell 表达式。
因此,我addDependentFile "MyDependency.txt"
用来告诉 ghc 在编译我的代码时检查该文件是否有修改。
不幸的是,这不起作用,因为addDependentFile
仅相对于调用 ghc 的目录起作用。
我如何使用它来依赖于我正在编译的文件旁边(在同一目录中)的文件?
您可以使用location
fromLanguage.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 []
(公共领域代码)