Осведомленность Cabal о внешних зависимостях TemplateHaskell
Чтобы встроить некоторые статические файлы в сборку, я использую: 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")
Встраивать файлы в создаваемый бинарный файл.
Однако, одна утомительная вещь состоит в том, что клика не знает, что файл, использующий embedFile
зависит от загружаемого файла (и поэтому изменяется на something/external.txt
не вызывает MyFile
быть перестроен на стройке).
Есть ли способ рассказать клике об этой зависимости? Единственное решение, которое у меня есть сейчас, это просто touch
файл на Haskell для его перекомпиляции, но это утомительно.
1 ответ
addDependentFile является частью шаблона Haskell. Он говорит ghc использовать этот файл в вычислениях зависимостей - cabal даже не нужен.
embedFile
должен называть это. Тот факт, что это не так, вызывает у меня подозрение по поводу библиотеки. Тем не менее, вы можете создать помощник, который будет выглядеть примерно так:
embed :: FilePath -> Q Exp
embed p = addDependentFile p >> embedFile p
Просто обратите внимание на постановочные ограничения TH и поместите это в файл, который его не использует.