4

我希望MyDependency.txt在更改该文件时重新计算使用 IO 并依赖于文件的 TemplateHaskell 表达式。

因此,我addDependentFile "MyDependency.txt"用来告诉 ghc 在编译我的代码时检查该文件是否有修改。

不幸的是,这不起作用,因为addDependentFile仅相对于调用 ghc 的目录起作用。

我如何使用它来依赖于我正在编译的文件旁边(在同一目录中)的文件?

4

1 回答 1

5

您可以使用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 []

(公共领域代码)

于 2013-04-23T07:56:35.950 回答