Eu estava tentando construir um projeto Haskell antigo com um canal/ramificação nixpkgs mais antigo ( 18.03
).
Na minha primeira tentativa de compilá-lo, especifiquei a versão do compilador como ghc843
... No entanto, ao compilar - parecia estar compilando TODAS as bibliotecas externas quando eu esperava que estivesse vindo do cache.
Felizmente, lembrei-me de ter encontrado este problema anteriormente: Depurando por que o nix está construindo um pacote desnecessariamente quando deveria estar no cache binário do nixpkgs?
Onde o problema era basicamente eu estava usando uma versão "não padrão" do ghc (que Hydra não teria construído / armazenado em cache).
Então agora minha pergunta é, como posso descobrir qual é a versão do compilador "padrão" - ou aquela que o Hydra construiu/armazenou em cache?
{
nixpkgs ? import <nixpkgs> {}
, sources ? import ./nix/sources.nix
, compiler ? "ghc843" } :
let
niv = import sources.nixpkgs {
overlays = [
(_ : _ : { niv = import sources.niv {}; })
] ;
config = {};
};
pkgs = niv.pkgs;
myHaskellPackages = pkgs.haskell.packages.${compiler}.override {
};
in
(myHaskellPackages.callCabal2nix "abc" (./.) {})
Por acaso eu tentei ghc823
o que parece ser o padrão (ou pelo menos tinha ativos em cache no Hydra).
Eu descobri como listar as versões disponíveis do compilador ghc usando o nix repl assim:
nix-repl> yolo = (import nix/sources.nix {})
nix-repl> yolo.blablaTestTabCompletion
nix-repl> yolo2 = (import yolo.nixpkgs {})
nix-repl> yolo2.haskell.packages.
yolo2.haskell.packages.ghc7103 yolo2.haskell.packages.ghc843
yolo2.haskell.packages.ghc7103Binary yolo2.haskell.packages.ghcHEAD
yolo2.haskell.packages.ghc802 yolo2.haskell.packages.ghcjs
yolo2.haskell.packages.ghc821Binary yolo2.haskell.packages.ghcjsHEAD
yolo2.haskell.packages.ghc822 yolo2.haskell.packages.integer-simple
yolo2.haskell.packages.ghc841
Se você apenas usar
haskellPackages
em vez dehaskell.packages.ghc<version>
você sempre obterá a versão padrão.haskellPackages = dontRecurseIntoAttrs haskell.packages.ghc883
Você também pode verificar a linha~/.nix-defexpr/channels/nixpkgs/pkgs/top-level/all-packages.nix
(ou qualquer que seja o caminho para o canal nixpkgs que você está usando) para ver qual é a versão ghc padrão para o seu canal.Aqui está um link para essa linha em
18.03
: https://github.com/NixOS/nixpkgs/blob/18.03/pkgs/top-level/all-packages.nix#L6216 :Em uma nota lateral, você provavelmente deseja fixar a versão nixpkgs em seus projetos haskell, para que você saiba que eles podem ser reconstruídos de forma confiável mesmo quando você atualiza o resto do seu sistema. Consulte https://github.com/Gabriel439/haskell-nix/tree/master/project0#pinning-nixpkgs ou https://nixos.wiki/wiki/FAQ/Pinning_Nixpkgs para obter mais informações sobre como fazer isso.