Haskell Package Publishing

Maintainers

So

  • You’re an open source maintainer with dozens of Haskell libraries to maintain.
  • You want to be able to test against new or even unreleased versions of GHC.
  • You want your build plan to stay relatively consistent across all your projects.

Adopting a Horizon Stable Package Set will let you tackle compiler upgrades and dependency conflicts on your own terms, and then make the results of those changes reusable using the new Stable Package Set as an input everywhere.

Future Proofing

You can use horizon to future-proof Haskell packages by using the shell environment for a particular package defined in one of the package sets.

Let’s say an as example you want to build websockets using GHC 9.6. Since websockets is defined in the lts/ghc-9.6.x branch of horizon-platform, you can use the same environment to provision a shell that can build websockets at GHC 9.6.

git clone https://github.com/jaspervdj/websockets
cd websockets
nix develop 'git+https://gitlab.horizon-haskell.net/package-sets/horizon-platform?ref=lts/ghc-9.6.x#websockets.env'

When developing your project locally, use the SPS as a flake input and then override it liberally. Use whatever versions you need to get your project to build and run.

When you’re ready to release, try to update the SPS with the new release and see what goes wrong, then decide what to do about it. It can guide you to what needs your attention next.

Always put the needs of your projects first and the SPS second.

We are currently experimenting with programmatic upgrades to the package set, some details of which are in the README.md in horizon-platform. We aim to provide a range of tools to allow SPS managment to be machine assisted, but retain the option to edit the package set manually with a text editor. For more information, please contact us on matrix.