gpt4 book ai didi

haskell - 如何在相对于正在编译的文件的文件上使用 TemplateHaskell 的 addDependentFile?

转载 作者:行者123 更新时间:2023-12-05 01:09:11 27 4
gpt4 key购买 nike

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

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

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

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

最佳答案

您可以使用 location来自 Language.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 []

(公共(public)领域代码)

关于haskell - 如何在相对于正在编译的文件的文件上使用 TemplateHaskell 的 addDependentFile?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16163948/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com