| Method | Time (first run) | Time (cached run) | Network Traces | |--------|------------------|--------------------|----------------| | cabal build --only-dependencies | 12 min 30 sec | 2 min 10 sec | 870 MB fetched | | cabal with --jobs=8 | 6 min 15 sec | 1 min 50 sec | 870 MB (parallel) | | gtools + Nix binary cache | 2 min 20 sec | 12 sec | < 10 MB (metadata only) | | gtools + local Hackage mirror | 1 min 10 sec | 45 sec | 0 (over LAN) |
repository hackage.local url: http://localhost:8080 -- secure: False (only for internal mirrors) Now every cabal download is —near-instantaneous. Real-World Benchmark: Cold vs. gtools cabal download hot Here’s a comparison for building a medium-sized project (like pandoc or hakyll ): gtools cabal download hot
cabal update cabal v2-install --only-dependencies --dry-run Then pipe the list into a parallel downloader like xargs -P 4 : | Method | Time (first run) | Time
#!/bin/bash # gtools-cabal-hot.sh cabal update catalog="$(cabal v2-list-bin --simple-output | cut -d' ' -f1)" However, even the most elegant code can be
In the fast-paced world of functional programming, Haskell remains a gold standard for safety, concurrency, and correctness. However, even the most elegant code can be stalled by a sluggish build pipeline. If you’ve found yourself typing variations of cabal update && cabal install only to watch your terminal crawl, you have likely searched for the phrase: gtools cabal download hot .