В чем разница между `stack clean` и удалением каталога`.stack-work`?

1 Контекст

Я участвую в проекте Haskell, который включает в себя множество C-бит и FFI. Поэтому я часто запускаю и перезапускаю команды вроде

$ stack build
$ stack build --force-dirty
$ stack clean
$ rm ./.stack-work

снова и снова, чтобы C-биты были правильно связаны с битами Haskell. Иными словами, иногда все работает только при запуске stack build, а иногда и нет (в этом случае мне приходится циклически перебирать указанные выше команды, пока мой проект не будет правильно создан).

Это означает, что у меня нет правильного понимания того, как stack (через ghc) собирает C-биты перед сборкой бит Haskell. Итак, вот один из вопросов, которые помогут мне начать расстраивать мою путаницу:

2 Вопрос

Есть ли какая-либо заметная разница между запуском stack clean и удалением содержимого каталога .stack-work? Существуют ли случаи, когда удаление каталога .stack-work необходимо в качестве хорошей меры предосторожности, чтобы убедиться, что вы на самом деле выполняете чистую сборку?

Ответ 1

Как вы можете видеть, прочитав здесь источник:

https://github.com/commercialhaskell/stack/blob/master/src/Stack/Clean.hs

Есть два уровня, полный и неглубокий. Я считаю, что мелкий по умолчанию является дефолтом. Кажется, что он способен очищать определенные пакеты, или если вы вообще не предоставляете никаких параметров, он очистит все, кроме дополнительных файлов в локальных пакетах.