Call to action for updating Haskell packages after bump to LTS-15

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.

  1. Clone the nixpkgs repo locally:

    $ git clone git@github.com:NixOS/nixpkgs.git
    ...
    $ cd nixpkgs/
    
  2. 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 on master that has already been fixed in haskell-updates. haskell-updates is regularly merged back into master.

  3. 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, not master.

  • 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 from configuration-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 to master: Please join the new weekly "Haskell Updates" video livestream - #10 by cdepillabout

    These 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 cdepillabout

    This 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.

9 Likes

I checked and many packages I’m interested in were broke by too strict bounds on the network-bsd package. I created this PR that should fix it after it’s accepted and nixpkgs updates to that new version.

2 Likes

Others might find this script for mass testing lists of packages in their cloned nixpkgs folder useful. I used it to test the most popular packages on the hackages browse page but you can customize to packages you care about.

for lib in "git-annex" \
           "yesod-core" \
           "hlint" \
           "lens" \
           "warp" \
           "egison" \
           "pandoc" \
           "hakyll" \
           "wai-extra" \
           "persistent" \
           "ats-pkg" \
           "yesod-auth" \
           "purescript" \
           "shelly" \
           "language-ats" \
           "conduit" \
           "tidal" \
           "http-client" \
           "tls" \
           "yaml" \
           "texmath"
do
	echo "try building haskellPackages.$lib"
	nix-build -A haskellPackages.$lib
done;
2 Likes

If you’re looking for more help fixing problems, I recommend the following resources:

I’ll do another live stream tonight at 20:00 CET. If you have trouble with a Haskell package in Nix, you are welcome to just ask me for help. You can chat with me (and others) at Twitch. If you’d like to voice chat, then you can use the haskell4nix channel on Discord, which is audible inside of the live stream.

2 Likes

Will LTS-15 go into Nixos-20.03?

I don’t believe it will.