嵌入式文件更改后的Cabal重建

5

我正在这样使用file-embed包:

import qualified Data.ByteString as B
import qualified Data.ByteString.Internal as B (w2c)
import qualified Data.FileEmbed as E

initWindow = do
    b <- Gtk.builderNew
    let glade = map B.w2c $ B.unpack $ $(E.embedFile "window.glade") in
        Gtk.builderAddFromString b glade
    ...

即使只更改glade文件,cabal是否可以重新构建此文件?


你尝试过使用“其他文件”类别吗? - Thomas M. DuBuisson
好的,有data-files,但我喜欢只有一个文件来分发的想法。我需要的是一种方法,使.hs文件明确依赖于glade文件。 - György Andrasek
1个回答

4

支持这个功能已经被添加到GHC 7.4/7.6中。问题在于编译器目前不允许TemplateHaskell插值添加文件依赖关系。更多信息请参见这个链接

当这个变化发布后,您可以使用以下代码来创建一个新的embedFile'函数:

import Data.FileEmbed

import Language.Haskell.TH.Syntax
import Language.Haskell.TH.Lib

embedFile' :: FilePath -> Q Exp
embedFile' path = do
  qAddDependentFile path
  embedFile path

这个必须放在与您使用TH函数不同的模块中。


1
这个更改实际上从未被应用,因此即使在这个问题和答案八年之后,我们仍然无法做到这一点。 - Daniel Martin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接