К сожалению, я думаю, что лучший способ сделать это в настоящее время - это использовать для каждого пакета ghc-options
особенность файла c stack.yaml
, определяемого проектом, чтобы явно отключить автоматическое генерирование c CAF для внешних зависимостей. В своем файле stack.yaml
( не package.yaml
или .cabal
файл) вы можете добавить:
ghc-options:
hashable: -fno-prof-auto
и затем выполнить:
stack build --profile
stack exec --profile -- myProgram +RTS -p
как обычно.
Поскольку, кажется, нет способа указать, что этот флаг применяется только к профилированной сборке, это означает, что hashable
необходимо будет пересобрать специально для вашего проекта в как профилированные, так и непрофилированные версии, даже если непрофилированная версия должна быть эквивалентна «обычной» непрофилированной версии.
Кроме того, хотя есть флаги "$everything"
и "$locals
, которые могут использовать, чтобы можно было предположить, что сработает следующее:
ghc-options:
"$everything": -fno-prof-auto
"$locals": -fprof-auto
В документации стека неясно, как они разрешаются, и имеется несколько нечетких предупреждений о том, что флаг "$everything"
опасен. Я никак не мог заставить его работать.