让 Cabal 了解外部 TemplateHaskell 依赖项
Making Cabal Aware of External TemplateHaskell Dependencies
要在构建中嵌入一些静态文件,我正在使用:https://hackage.haskell.org/package/file-embed-0.0.10.1/docs/Data-FileEmbed.html
它允许你做:
MyFile.hs
myFile :: Data.ByteString.ByteString
myFile = $(embedFile "something/external.txt")
将文件嵌入到生成的二进制文件中。
然而,一件令人讨厌的事情是 cabal 不知道使用 embedFile
的文件取决于它加载的文件(因此更改为 something/external.txt
不会导致 MyFile
将在构建时重新构建)。
有什么办法可以告诉 cabal 这种依赖关系吗?我现在唯一的解决方案是 touch
Haskell 文件以使其重新编译,但这很乏味。
addDependentFile 是模板 Haskell 的一部分。它告诉 ghc 在依赖计算中使用该文件——甚至不需要 cabal。
embedFile
应该这样调用。它不是的事实让我对图书馆产生了怀疑。不过,您可以创建一个如下所示的助手:
embed :: FilePath -> Q Exp
embed p = addDependentFile p >> embedFile p
请注意 TH 的暂存限制,并将其放入不使用它的文件中。
要在构建中嵌入一些静态文件,我正在使用:https://hackage.haskell.org/package/file-embed-0.0.10.1/docs/Data-FileEmbed.html
它允许你做:
MyFile.hs
myFile :: Data.ByteString.ByteString
myFile = $(embedFile "something/external.txt")
将文件嵌入到生成的二进制文件中。
然而,一件令人讨厌的事情是 cabal 不知道使用 embedFile
的文件取决于它加载的文件(因此更改为 something/external.txt
不会导致 MyFile
将在构建时重新构建)。
有什么办法可以告诉 cabal 这种依赖关系吗?我现在唯一的解决方案是 touch
Haskell 文件以使其重新编译,但这很乏味。
addDependentFile 是模板 Haskell 的一部分。它告诉 ghc 在依赖计算中使用该文件——甚至不需要 cabal。
embedFile
应该这样调用。它不是的事实让我对图书馆产生了怀疑。不过,您可以创建一个如下所示的助手:
embed :: FilePath -> Q Exp
embed p = addDependentFile p >> embedFile p
请注意 TH 的暂存限制,并将其放入不使用它的文件中。