There is no cabal hell.

A dear reader writes on my last piece:


There is no cabal hell, you say? Well, as the young people around me quip, before they try and duck another story, triggered!

Firstly, you quote well, Haskell padawan, but too quickly. From your stack overlay proof artifact, here’s the definition:

cabal-install does not manage to install a desired package for a reason or another, leading to large amount of manual work.

That’s a fine starting point to describe my own private Idaho.

My Own Cabal Hell

There is many a descent into cabal hell, but this one is mine.

It was around 2012, and I had deep-dived into the pipes ecosystem, as a way to learn the Haskell ropes, and as a career turn-pike. Two years before, I had become an ex-public service finance guy. You can imagine; at the intersection of public service and finance is a big fat pipe of moneys where all sorts of flotsam and jetsam accumulates. A long career of scrapping off the barnacles and parasites that attach to this flow can leave you weary and a little bit teary. I truly snort at Diehl when he points to crypto and announces they’re the bad guys: go visit the City and talk to the professionals. They’ll agree it’s all one big grift over a London Pride and have a laugh about it.

Anyways, I had snagged a recommend from the pipes community and found a remote ops role at a Texan startup. I drew build and test, mostly because jobs were handed out over Friday office pizza, but it was great. We argued over whether our monoidal data was commutative or not, and whether this would effect eventual consistency. I booked up on pretending to understand how to ssh into a remote machine, and what “stubbing it out” meant, and slowly but surely crafted together a white-noise Random instance of our data (cat pictures and likes, I would guess, but predictive UUID tags to me) and a pinned dependency list.

Two days from production injection launch, I found out the environment had been set to the latest ghc, when I had pinned to the prior version. Cloud haskell had still to do the SemVar shuffle. The word came down from Houston (literally): no variation will be tolerated and no further correspondance will be entered into.

By their morning, I had tracked down and added 23 forks of external projects that needed bumps to the development CI. It worked locally but, boom, the CI machine choked on the volume, and spewed out alerts to one and all. Bosses appeared on google chats, in Jira chronicals of unexpected work expansion, peering over shoulders, saying “This is Haskell, huh?”

I was cut in the next round, and never found out if Haskell followed me out the door. My brilliant Haskell career had gone bung.

Technical debt

Of course, as a modern and newly-minted cabal user, all is forgiven and we can laugh, right?

But fobbing off cabal hell as some green-tick technical point such as this (bless you Don) …


… is a cultural form of hiding technical debt that exists in the here and now.