Skip to content

SYSTEM Cited by 1 source

Stackage

What it is

Stackage is a curated set of Haskell package versions from Hackage that are known to build and work together. It is published as periodically-updated snapshots (LTS + nightly); a project pins a Stackage snapshot and gets a pre-solved dependency graph rather than relying on per-package SemVer declarations + Cabal's solver to find a compatible combination.

Why the wiki has a page on it

Stackage is the sysdesign-wiki's canonical example of a curated-package-set ecosystem in contrast to a SemVer-resolved ecosystem. Meta moved Sigma's Haskell dependencies to Stackage specifically to eliminate the per-package-bump yak-shave:

The problem with this setup [Cabal + Hackage directly] is that the pace of change on Hackage is fast, there are often breakages, and not all combinations of packages work well together. The system of version dependencies in Cabal relies too much on package authors getting it right, which is hard to ensure, and the tool support isn't what it could be. We found that using packages directly from Hackage together with Facebook's internal build tools meant adding or updating an existing package sometimes led to a yak-shaving exercise involving a cascade of updates to other packages, often with an element of trial and error to find the right version combinations.

As a result of this experience, we switched to Stackage as our source of packages. Stackage provides a set of package versions that are known to work together, freeing us from the problem of having to find the set by trial and error.

(sources/2015-06-26-meta-fighting-spam-with-haskell)

Canonical wiki datum: in a large dependency graph, author-declared SemVer constraints are not a substitute for an externally-curated compatibility matrix. The curated-set approach trades freshness for predictability — adding or updating a package becomes a snapshot bump rather than a trial-and-error solver session.

Seen in

Last updated · 319 distilled / 1,201 read