2011-12-20 3 views
3

Я использую file-embed пакет таким образом:Cabal восстановление на встроенном изменении файла

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 
    ... 

Можно ли сделать междусобойчик восстановить этот файл, даже если только изменения поляны файла?

+0

Вы пытались использовать категорию 'other-filrs'? –

+0

Ну, есть 'data-files', но мне нравится идея иметь ровно один файл для распространения. Мне нужен способ сделать файл .hs явно зависеть от файла glade. –

ответ

3

Поддержка этого будет/была добавлена ​​в GHC 7.4/7.6. Проблема в том, что компилятор еще не разрешает сращиваниям TemplateHaskell добавлять зависимостей файлов. См. this ticket для получения дополнительной информации.

Когда это изменение земля, вы можете использовать следующий код, чтобы создать новую 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.