Skip to content

Remove "Avoid NonEmpty.unzip" hint (fixes #1657)#1682

Closed
mgajda wants to merge 3 commits intondmitchell:masterfrom
mgajda:fix/remove-nonempty-unzip-hint
Closed

Remove "Avoid NonEmpty.unzip" hint (fixes #1657)#1682
mgajda wants to merge 3 commits intondmitchell:masterfrom
mgajda:fix/remove-nonempty-unzip-hint

Conversation

@mgajda
Copy link
Copy Markdown

@mgajda mgajda commented Apr 19, 2026

Fixes #1657.

base >= 4.19 exposes Data.Functor.unzip and GHC emits -Wx-data-list-nonempty-unzip for the NonEmpty.unzip form (core-libraries-committee/issues/258). The hlint hint is redundant with the compiler warning, cannot be CPP-gated per base version, and fires even when unzip is imported from Data.Functor rather than Data.List.NonEmpty.

One-line deletion in data/hlint.yaml. Self-test: 970 tests, 3 pre-existing baseline failures, unchanged from master.

mgajda added 3 commits April 15, 2026 14:45
…1679)

When suggesting record patterns, check if the constructor has type
applications (e.g. @type). If it does, don't suggest the record pattern
syntax since it would lose the type applications and produce invalid code.

Added test cases:
  - foo (Bar _ _ _ _) = x          -- Suggests Bar{}
  - foo (Bar @_ _ _ _) = x         -- No suggestion (type app present)
  - foo (Bar @A @b _ _ _) = x      -- No suggestion (multiple type apps)

Example from issue:
  Before fix: Ast.AstScatterS @_ @Shn1 @shp1 _ _ _ _ _
             Would suggest: Ast.AstScatterS {}  (WRONG - loses @types)
  After fix:  No suggestion (preserves correct code)
…dmitchell#1674)

With OverloadedStrings extension, string literals become polymorphic.
The hint to replace 'intercalate " "' with 'unwords' becomes incorrect
because:
  - intercalate " " xs : polymorphic type (works with any IsString a)
  - unwords xs : requires [String] -> String (only works with String)

Solution:
- Moved intercalate/unwords rule from YAML patterns to code-based hint
- Added extension state checking (OverloadedStrings)
- Only suggest unwords when OverloadedStrings is NOT enabled

Test cases:
  - Without OverloadedStrings: suggests unwords ✓
  - With OverloadedStrings: no suggestion ✓
base >= 4.19 exposes `Data.Functor.unzip` and GHC warns about the
`NonEmpty.unzip` form via `-Wx-data-list-nonempty-unzip`
(core-libraries-committee/issues/258). The hlint hint is redundant
with the compiler warning, fires on imports that are not `NonEmpty.unzip`,
and cannot be CPP-gated per base version.

Drops one line from data/hlint.yaml. Self-test: 970 tests, 3 pre-existing
baseline failures, unchanged from master.
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

Remove malfunctioning hint "Avoid NonEmpty.unzip"

1 participant