我正在开发一个带有堆栈的Haskell项目,该项目生成一个二进制文件,其中静态资产嵌入到可执行文件中(例如图像)。这是通过Template Haskell完成的 - 我有一个名为Static
的模块,它调用一个TH函数来读取目录中的文件并嵌入它。
当静态资产更新时,我希望构建过程将更新的文件嵌入到二进制文件中。我试图通过运行touch Static.hs; stack build
来实现这一点,即更新调用TH然后构建的haskell源文件的时间戳。但是,这不会导致堆栈认为需要重建文件。
堆栈(或者底层的cabal工具)如何检测是否需要重建源文件,是否有推荐的方法来解决上述问题?
答案 0 :(得分:1)
在TemplateHaskell中调用qAddDependentFile。它告诉GHC该模块依赖于一个额外的文件。 Stack还使用来自GHC的信息来了解包依赖于额外文件。 file-embed包可以轻松嵌入文件,并为您处理此细节。