Осведомленность 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 и поместите это в файл, который его не использует.

Другие вопросы по тегам