Skip to content

Instantly share code, notes, and snippets.

@jappeace
Created May 14, 2026 19:51
Show Gist options
  • Select an option

  • Save jappeace/5e428936b633b2c6fed1c691d2e1c71e to your computer and use it in GitHub Desktop.

Select an option

Save jappeace/5e428936b633b2c6fed1c691d2e1c71e to your computer and use it in GitHub Desktop.
vibe log
can you read this https://github.com/haskell/cabal/pull/11716#discussion_r3222296355
⎿  Async hook Stop completed
● Bash(cd /home/claude/vibes/cabal && gh api repos/haskell/cabal/pulls/11716/comments | jq '.[] | select(.id
== 3222296355)' 2>/dev/null || gh api repos/haskell/cabal/…)
⎿  {
"url": "https://api.github.com/repos/haskell/cabal/pulls/comments/3222296355",
"pull_request_review_id": 4267587398,
… +35 lines (ctrl+o to expand)
● The comment is from zlonast (a collaborator) on PR https://github.com/haskell/cabal/pull/11716, on file
cabal-install/src/Distribution/Client/ProjectConfig/Legacy.hs at line 1764.
Their suggestion: "I suggest you stop throwing case sensitive warning"
This refers to the old code that had case-insensitive parsing with warnings like caseWarning — e.g.
accepting "false" with a warning that it should be "False". The reviewer is saying the new code should just
accept any casing silently without emitting that warning.
Would you like me to look at the current state of that PR and the relevant code, sir? 🧐
❯ I (jappeace) linked to a pr where it's introduced, they then ask about the vibe around it, can you
figure out the vibes?
⎿  Async hook Stop completed
● Bash(gh api repos/haskell/cabal/pulls/11716/comments | jq '[.[] | {id, user: .user.login, body, created_at,
in_reply_to_id}]')
⎿  [
{
"id": 3053955926,
… +50 lines (ctrl+o to expand)
● Bash(gh api repos/haskell/cabal/pulls/11716/reviews | jq '[.[] | {id, user: .user.login, state, body}]')
⎿  [
{
"id": 4078006306,
… +73 lines (ctrl+o to expand)
● Now let me look at the commit jappeace linked and the comment there.
● Bash(gh api repos/haskell/cabal/commits/92f018c2e28a21f521c057e40ccfdd3bbb044eb1/comments | jq '[.[] | {id,
user: .user.login, body, path, line, created_at}]')
⎿  [
{
"id": 185301031,
… +7 lines (ctrl+o to expand)
● Bash(gh api repos/haskell/cabal/commits/92f018c2e28a21f521c057e40ccfdd3bbb044eb1 | jq '{sha: .sha, message:
.commit.message, author: .commit.author.name, date: .comm…)
⎿  {
"sha": "92f018c2e28a21f521c057e40ccfdd3bbb044eb1",
"message": "New module for new style project configuration files\n\nThis defines the new cabal.pr
… +12 lines (ctrl+o to expand)
● Let me look at the actual code that was introduced in that commit, and also check the history of the Parsec
Bool case-sensitivity.
● Bash(gh api repos/haskell/cabal/commits/92f018c2e28a21f521c057e40ccfdd3bbb044eb1 -H "Accept:
application/vnd.github.v3.diff" 2>/dev/null | grep -A 20 -B 5 "caseWarni…)
⎿  + _ | str == "False" -> ParseOk [] (Flag NoOptimisation)
+ | str == "True" -> ParseOk [] (Flag NormalOptimisation)
+ | str == "0" -> ParseOk [] (Flag NoOptimisation)
… +25 lines (ctrl+o to expand)
● Bash(git log --all --oneline --grep="case sensitive" --grep="caseWarning" --grep="Bool.*case" --
"Cabal-syntax/" "Cabal/" | head -20)
⎿  (No output)
● Bash(git log --all --oneline --grep="case.sensitive" -- "Cabal-syntax/" "Cabal/" | head -20)
⎿  (No output)
● Bash(git log --all --oneline --grep="case.sensitive" | head -20)
⎿  fc4ce6950 Merge pull request #6463 from phadej/T5677-windows
d3a2f9610 T5677 rename prog to program, case-sensitive type-systems break
8b18c0c55 Parse compiler field from old config files correctly Really old versions of cabal-install
… +26 lines (ctrl+o to expand)
● Bash(git log --all --oneline --grep="caseWarning\|PWTBoolCase\|BoolCase" | head -20)
⎿  (No output)
● Bash(git log --all --oneline --grep="PWTBoolCase\|BoolCase\|parsecWarning.*Bool\|Bool.*case" | head -20)
⎿  (No output)
● Bash(git log --all --format="%h %s" -- "**/Parsec.hs" | grep -i "bool\|case" | head -20)
⎿  557bc2bcb remodel buildable boolean field annotation
f1e811b5d attach trivia to boolean
a19d8d2bd Make all-indented case work too (freetext)
9d4dcc9eb Remove IfElseBlock from the Field-ast, use Syntax type not Bool
● Bash(git show 3cfa8f330 --stat --format="%H %s%n%b" | head -30)
⎿  3cfa8f330c1249049bc2e34deac7c164c773f843 Tweak warning message about bool fields to include the fie
ld name Warning: The 'buildable' field is case sensitive, use 'True' or 'False'.
… +3 lines (ctrl+o to expand)
● Bash(git log --all --oneline --follow -p -- "**/Cabal/Parse.hs" "**/ParseUtils.hs" 2>/dev/null | grep -B 2
-A 5 "caseWarning\|case.sensitive\|Bool.*True.*False" | he…)
⎿  (No output)
● Bash(git show 3cfa8f330 --format="%H%nAuthor: %an%nDate: %aD%n%n%B" -p)
⎿  3cfa8f330c1249049bc2e34deac7c164c773f843
Author: Duncan Coutts
Date: Fri, 28 Mar 2008 01:20:06 +0000
… +20 lines (ctrl+o to expand)
● Bash(git log --all --oneline --diff-filter=A -- "**/ParseUtils.hs" | head -5 && echo "---" && git log --all
--oneline -- "**/ParseUtils.hs" | grep -i "bool\|case\|wa…)
⎿  40db8d7f5 Move parsing utils from D.C.Config into its own module.
1517ab382 Split ParseUtils module out of Utils module
70b4d9ae0 Rearange unit tests some more add extract more tests from the other modules
… +30 lines (ctrl+o to expand)
● Now let me look at the original commit that introduced the case-sensitive Bool parsing with warnings.
● Bash(git show e92d65738 --format="%H%nAuthor: %an%nDate: %aD%n%n%B" -p)
⎿  e92d65738de178659bdadd82b42d2789b4468d67
Author: Duncan Coutts
Date: Thu, 27 Mar 2008 21:34:11 +0000
… +47 lines (ctrl+o to expand)
● Now I have the full picture. Here's the vibe, sir:
The Vibe on Bool Case-Sensitivity
The case-sensitive warning was introduced by Duncan Coutts in March 2008 (commit e92d6573), and his commit
message explains the reasoning very clearly:
We want to allow case-insensitive parsing however we don't want packages being uploaded to hackage that
will break older versions of Cabal. If we allow new valid parses then we will end up breaking stuff. So
what we really want to do is allow new parses but warn if they're not ones that older versions of Cabal
would have allowed. So long as hackage rejects packages that have parse warnings then we can prevent new
.cabal files appearing on hackage that would break older Cabal versions.
He even called it a "smelly hack" in the code comment:
-- TODO: this is a bit smelly hack. It's because we want to parse bool fields liberally but not accept new
parses. We cannot do that with ReadP because it does not support warnings. We need a new parser framework!
TL;DR: The case-sensitive warning was never about enforcing Haskell's Bool conventions. It was a
backwards-compatibility shim — accept true/false gracefully, but warn so that Hackage would reject uploads
containing them, preventing breakage on older Cabal versions that only accepted True/False.
In 2008 this made sense. In 2026, 18 years later, no one is running a Cabal version that can't parse
true/false. The warning has outlived its purpose. zlonast's suggestion to drop it seems very reasonable —
it's removing a vestige of a backwards-compat concern that no longer applies.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment