让Cabal意识到外部TemplateHaskell依赖关系

时间:2018-04-10 15:09:15

标签: haskell cabal template-haskell

要在构建中嵌入一些静态文件,我正在使用: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文件来重新编译它,但这很乏味。

1 个答案:

答案 0 :(得分:1)

addDependentFile是模板Haskell的一部分。它告诉ghc在依赖计算中使用该文件 - 甚至不需要cabal。

embedFile应该称之为。事实上,它并没有让我对图书馆产生怀疑。不过,您仍然可以创建一个看起来像这样的帮助器:

embed :: FilePath -> Q Exp
embed p = addDependentFile p >> embedFile p

请注意TH的暂存限制,并将其放在一个不使用它的文件中。