The Haskell ecosystem in Nixpkgs generally tracks the latest Stackage LTS release. Stackage LTS-15 was recently released, which switches to GHC-8.8.2 from GHC-8.6.5. The Haskell ecosystem in Nixpkgs has followed suit and switched from LTS-14 to LTS-15.
During this transition, some Haskell packages have been marked broken.
This is a call to action for nix-using Haskellers to check that their favorite Haskell packages still compile and work in nixpkgs. If you find a package that isn’t working, we’d love to get a PR unbreaking it.
Checking if your package compiles
Here’s the steps for checking if a package still compiles after the bump to LTS-15.
-
Clone the nixpkgs repo locally:
$ git clone git@github.com:NixOS/nixpkgs.git ... $ cd nixpkgs/
-
Checkout the
haskell-updates
branch.$ git checkout haskell-updates
All the Haskell-related development in nixpkgs takes place on the
haskell-updates
branch.If you don’t use the
haskell-updates
branch for this, it is possible that you will try to fix a package onmaster
that has already been fixed inhaskell-updates
.haskell-updates
is regularly merged back intomaster
. -
Try compiling the package. For instance, to check if
lens
compiles:$ nix-build -A haskellPackages.lens ... /nix/store/g3dw4xikc71x2dpvx14052ym08v5fn9x-lens-4.18.1
In cases where the package can be successfully built, you’ll often be able to pull it from the nixpkgs cache.
In cases where the package cannot be built, you’ll often get a message about it being marked broken:
$ nix-build -A haskellPackages.AAI error: Package ‘AAI-0.2.0.1’ in /home/illabout/git/nixpkgs/pkgs/development/haskell-modules/hackage-packages.nix:55 is marked as broken, refusing to evaluate. a) For `nixos-rebuild` you can set { nixpkgs.config.allowBroken = true; } in configuration.nix to override this. b) For `nix-env`, `nix-build`, `nix-shell` or any other Nix command you can add { allowBroken = true; } to ~/.config/nixpkgs/config.nix.
The next section will talk about how to unbreak Haskell packages.
Unbreak your package
There is no set method to fixup any Haskell package. Different kinds of breakage will require different fixes.
If you are able to get a broken Haskell package building, please send a PR to nixpkgs.
Here are some tips for fixing Haskell packages:
-
There is a convenient video for how to mark Haskell packages as unbroken if they were marked broken by mistake (or if they have become unbroken over time): Video Tutorial: How to Fix Broken Haskell Packages in Nix
This video is for the simplest case, but this covers a surprising large number of packages. It is also a short video, so I suggest giving it a watch if you’d like to contribute to the Haskell ecosystem in nixpkgs.
-
When sending PRs to nixpkgs for Haskell-related changes, make sure to set the base branch as
haskell-updates
, notmaster
. -
The main files in nixpkgs you can look at to get ideas of how to fix Haskell packages are the following:
-
Make sure to not directly edit
hackage-packages.nix
. This file is generated automatically fromconfiguration-hackage2nix.yaml
. This is discussed in the video linked above. -
When fixing things, we really like to upstream fixes where appropriate. This helps the wider Haskell community, not just nixpkgs.
-
If all the packages you care about are working, but you still want to help others, I suggest you watch the
haskell
label on the nixpkgs repo. Reviewing PRs or responding to issues is a huge help for the other nixpkgs maintainers.You can also look at past PRs with that label to get an idea of how other people fixed broken Haskell packages.
Getting help
If you’re looking for more help fixing problems, I recommend the following resources:
-
The Haskell section in the nixpkgs manual.
Although most of this info is not directly helpful…
-
Weekly videos from @peti where he updates a bunch of Haskell packages and merges the
haskell-updates
branch in tomaster
: Please join the new weekly "Haskell Updates" video livestream - #10 by cdepillaboutThese can be very helpful to get an idea of what goes into getting Haskell packages compiling.
-
An explanation of how the
haskell-updates
branch works, and the Haskell stuff in nixpkgs in general: haskellPackages.stm-containers fails to build - #4 by cdepillaboutThis might be somewhat hard to follow if you’re new to the haskell ecosystem in nixpkgs.
-
A long, rambling explanation of how to use Haskell together with nix.
This is mostly for someone looking to get into using nix with Haskell, rather than someone who is already happily using it.
-
Places to ask questions over chat:
-
The #nix channel on the FP-chat slack
This is a Nix-specific room, but many Haskellers hang out here, so it is a good place to ask Nix/Haskell questions. I normally check in here about twice a day or so.
-
The Nix Discord
There doesn’t seem to be as many Haskellers here, but I normally check in once or twice a day, so will hopefully see most Haskell-related questions.
-
IRC: #nixos on irc.freenode.net
I don’t personally hang out here, but I sometimes hear of Haskellers getting their questions answered here.
-
Additional communities: Get In Touch - NixOS Wiki
I don’t know how active any of these are.
-
People
The main people you see active on Github for Haskell-related PRs are the following:
If you open a Haskell-related PR on nixpkgs and no one responds after a few days, feel free to ping me.