Восстановление Cabal при изменении встроенного файла - PullRequest
3 голосов
/ 20 декабря 2011

Я использую пакет 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
    ...

Можно ли заставить Cabal перестроить этот файл, даже если изменяется только файл glade?

1 Ответ

3 голосов
/ 20 декабря 2011

Поддержка для этого будет / была добавлена ​​в 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.

...