Сначала я пытался так:
nix-shell -p "haskell.packages.ghc821.ghcWithPackages (p: with p; [text hspec lens])" -j4 --run 'ghc Main.hs -prof
Тогда GHC сказал мне
Main.hs:4:1: error:
Could not find module ‘Control.Lens’
Perhaps you haven't installed the profiling libraries for package ‘lens-4.15.4’?
Use -v to see a list of the files searched for.
Поискав в Интернете, я нашел следующее: https://github.com/NixOS/nixpkgs/issues/22340
Так что вроде из кеша скачать не получится. Но ничего страшного, если хотя бы я смогу построить профилированные варианты локально.
Могу ли я сделать это как-нибудь, просто немного изменив выражение nix, заданное для -p
?
Тогда, когда я писал этот вопрос, я вспомнил этот ресурс: https://github.com/NixOS/nixpkgs/blob/bd6ba7/pkgs/development/haskell-modules/lib.nix
Где нашел enableLibraryProfiling
. Итак, я попробовал:
nix-shell -p "haskell.packages.ghc821.ghcWithPackages (p: with p; [text hspec (haskell.lib.enableLibraryProfiling lens)])" -j4 --run 'ghc Main.hs -prof'
Что привело меня к новой ошибке:
src/Control/Lens/Internal/Getter.hs:26:1: error:
Could not find module ‘Data.Functor.Contravariant’
Perhaps you haven't installed the profiling libraries for package ‘contravariant-1.4’?
Use -v to see a list of the files searched for.
|
26 | import Data.Functor.Contravariant
| ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
Так что, если бы я мог сопоставить все пакеты с enableLibraryProfiling
на них, я думаю, это могло бы сработать. Но на данный момент мои познания в никс не так уж далеко. Как я мог это сделать? И действительно ли это правильный путь?
shell.nix
вместо того, чтобы указывать все в командной строке. - person chepner   schedule 04.12.2017