要在构建中嵌入一些静态文件,我正在使用: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文件来重新编译它,但这很乏味。
答案 0 :(得分:1)
addDependentFile是模板Haskell的一部分。它告诉ghc在依赖计算中使用该文件 - 甚至不需要cabal。
embedFile
应该称之为。事实上,它并没有让我对图书馆产生怀疑。不过,您仍然可以创建一个看起来像这样的帮助器:
embed :: FilePath -> Q Exp
embed p = addDependentFile p >> embedFile p
请注意TH的暂存限制,并将其放在一个不使用它的文件中。